2009-02-09 6 views
8

J'ai un VirtualHost qui ressemble à:Comment rediriger dynamiquement les URL www-base à des URL non-www avec plusieurs domaines en même VirtualHost

<VirtualHost *:80> 

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

</VirtualHost> 

Quand quelqu'un visite www.domain1.com/test , ils devraient être redirigés vers:

domain1.com/test 

Quand quelqu'un visite www.domain2.com/test, ils devraient être redirigés vers:

domain2.com/test 

Mes règles de réécriture actuelles manquent.

Edit: Voici ce que j'ai jusqu'à présent:

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

De toute évidence, cela génère une boucle de redirection infinie.

Répondre

6

Votre RewriteCond est un peu bancal. Je suis surpris qu'il fasse quoi que ce soit, puisqu'il semblerait essayer de faire correspondre l'hôte www.domain1.com au motif www\.www.domain1.com. Ces directives ont fonctionné pour moi:

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

Parfait, merci! –

10

Pas besoin de réécriture.

<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

Cela redirigera tout le trafic vers domain1.com, j'ai besoin que le trafic reste sur leurs sites respectifs, tout en supprimant le 'www'. –

+0

Très bien, mis à jour - le modèle est le même, bien sûr. – bobince

+0

Je ne crois pas que cela conservera la structure de l'URL, n'est-ce pas? Je suppose que www.domain2.com/test1 redirigerait vers http://domain2.com, plutôt que le http://domain2.com/test1 souhaité –

0

Vous pouvez avoir plusieurs VirtualHosts dans un fichier de configuration, vous devez changer votre config à ceci:

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

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

Vous pouvez ajouter un autre VirtualHost pour chaque domaine que vous voulez faire.

+0

Cela configure simplement les alias pour chaque domaine, il ne redirige pas le trafic de www.domain1.com vers domain1.com. –