Mam serwer dedykowany z Apache, na którym skonfigurowałem niektóre VirtualHosty. Skonfigurowałem jeden do obsługi domeny www oraz domeny innej niż www.
Mój plik VH .conf dla strony www:
<VirtualHost *>
DocumentRoot /var/www/site
ServerName www.example.com
<Directory "/var/www/site">
allow from all
</Directory>
</VirtualHost>
Z tym .htaccess
:
RewriteEngine on
RewriteBase /
RewriteCond %{HTTP_HOST} ^www.example.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]
Czy istnieje prosty sposób przekierowania strony www do wersji innej niż www? Obecnie wysyłam obie wersje do tego samego DocumentRoot
i używam, .htaccess
ale jestem pewien, że muszę to zrobić w pliku VirtualHost.
apache-2.2
mod-rewrite
redirect
virtualhost
DisgruntledGoat
źródło
źródło
Odpowiedzi:
Okazuje się, że
mod_rewrite
reguły są poprawne w pliku VirtualHosts, pozaRewriteBase
regułą. Skończyło się na tym:EDYCJA: zgodnie z radą Joschi w komentarzach, teraz używam tej uproszczonej wersji przy użyciu
Redirect
dyrektywy zmod_alias
:źródło
:80
poVirtualHost *
powoduje, że wszystko zwraca „Zabronione”!Bądź bardzo ostrożny z przekierowaniami 301, ponieważ domyślnie przeglądarka, która odbiera przekierowanie 301, będzie je przechowywać na stałe - co oznacza, że stracisz kontrolę nad tym, co przeglądarka zobaczy, gdy będzie próbowała uzyskać dostęp do domeny
www.example.com
.Zobacz na przykład tę dyskusję http://getluky.net/2010/12/14/301-redirects-cannot-be-undon/
Więc albo upewnij się, że się nie buforuje, albo użyj mod_proxy (polecam mod_proxy).
Jeśli nie masz nic przeciwko temu, aby użytkownik zobaczył zmianę adresu URL na pasku adresu przeglądarki, użyj mod_rewrite:
Jeśli chcesz, aby „przekierowanie” było niewidoczne dla użytkownika, użyj mod_proxy:
Należy zauważyć, że źle skonfigurowany mod_proxy może uszkodzić sieć.
źródło
Możesz dodać
ServerAlias example.com
do,VirtualHost
ale wydajność będzie się różnić od przekierowania.Edytować
Ponieważ chcesz przekierować i nie potrzebujesz zaawansowanych funkcji, wydaje się, że używanie
Redirect
powinno wystarczyć. Można by umieścićRedirect
pod dyrektywy wirtualnego hosta.Rozwiązaniem po stronie klienta byłoby użycie
meta refresh
tagu.źródło
www.example.com
naexample.com
tę metodę?ServerName
iServerAlias
. Jeden ma example.com, a drugi www.example.com. Następnie oba wpisy dns uzyskają dostęp do dokumentów określonych na tym samym vhost.cóż, możesz utworzyć jeden wirtualny host dla SERVERNAME www.example.com i przekierować go do innego wirtualnego hosta o nazwie server example.com
źródło