2009-02-09 15 views
8

Mam VirtualHost, który wygląda mniej więcej tak:Jak dynamicznie przekierowania www opartych na non-www URL z wieloma domenami w tym samym VirtualHost

<VirtualHost *:80> 

    ServerName domain1.com 
    ServerAlias www.domain1.com domain2.com www.domain2.com 

</VirtualHost> 

Kiedy ktoś odwiedza www.domain1.com/test powinny one zostać przekierowany do:

domain1.com/test 

Kiedy ktoś odwiedza www.domain2.com/test, powinny one zostać przekierowany do:

domain2.com/test 

Brak moich aktualnych zapisów RewriteRules.

Edycja: Oto co mam do tej pory:

# Rewrite www to non-www 
RewriteEngine on 
RewriteCond %{HTTP_HOST} www\.%{HTTP_HOST}$ [NC] 
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [L,R=301] 

Oczywiście, to generuje nieskończoną pętlę przekierowania.

Odpowiedz

6

Twój RewriteCond jest nieco nieporęczny. Jestem zaskoczony, że robi cokolwiek, ponieważ wydaje się, że próbuje dopasować hosta www.domain1.com do wzorca www\.www.domain1.com. Te dyrektywy zadziałały dla mnie:

# Redirect www to non-www 
RewriteEngine on 
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 
RewriteRule ^(.*)$ http://%1$1 [L,R=301] 
+0

Idealne, dzięki! –

10

Nie ma potrzeby przepisywania.

<VirtualHost *:80> 
    ServerName domain1.com 
    ServerAlias domain2.com 
    ... real vhost settings ... 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName www.domain1.com 
    Redirect permanent/http://domain1.com/ 
</VirtualHost> 
<VirtualHost *:80> 
    ServerName www.domain2.com 
    Redirect permanent/http://domain2.com/ 
</VirtualHost> 
+0

To przekieruje cały ruch do domain1.com, potrzebuję, aby ruch pozostał na odpowiednich stronach, usuwając "www". –

+0

Dobra, zaktualizowany - oczywiście ten sam wzór jest taki sam. – bobince

+0

Nie wierzę, że zachowa to strukturę adresów URL, prawda? Zakładam, że www.domain2.com/test1 przekieruje do strony http://domain2.com, a nie żądanego http://domain2.com/test1 –

0

Można mieć wiele VirtualHosts w pliku konfiguracyjnym, więc należy zmienić config to:

<VirtualHost *:80> 
    ServerName domain1.com 
    ServerAlias www.domain1.com 
</VirtualHost> 

<VirtualHost *:80> 
    ServerName domain2.com 
    ServerAlias www.domain2.com 
</VirtualHost> 

Możesz dodać kolejną VirtualHost dla każdej domeny, którą chcesz zrobić.

+0

To po prostu tworzy aliasy dla każdej domeny, nie przekierowuje ruchu z www.domain1.com na domain1.com. –

Powiązane problemy