13 votes

Apache réécrit les conditions multiples

J'ai un site Web qui a migré d'un ancien nom de domaine (par exemple, olddomain.com) vers un nouveau nom de domaine (par exemple, newdomain.com).

Pour des raisons de référencement, je dois réécrire tout le trafic du site Web vers le nouveau nom de domaine principal (par exemple, www.newdomain.com). Malheureusement, je ne sais pas comment ajouter plusieurs conditions de réécriture de type OR. Il semble qu'avec toutes les conditions, exemple de code ci-dessous, j'obtienne une condition AND.

<VirtualHost *:80>
        ServerAdmin webmaster@localhost
        ServerName newdomain.com
        ServerAlias www.newdomain.com
        ServerAlias olddomain.com
        ServerAlias www.olddomain.com
        DocumentRoot /var/www/newdomain.com/www/
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        RewriteEngine on
        RewriteCond %{HTTP_HOST} ^olddomain.com [NC]
        RewriteCond %{HTTP_HOST} ^www.olddomain.com [NC]
        RewriteCond %{HTTP_HOST} ^newdomain.com [NC]
        RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,NC]

        CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Quelqu'un peut-il me donner un coup de main ? Toute aide serait grandement appréciée.

19voto

Leif Points 436

Malgré le fait que vous ayez déjà trouvé une solution qui fonctionne pour vous, je vais quand même poster ceci comme étant la vôtre loin d'être optimal.

Solution n° 1 : Remplacer [NC] par [NC,OR] dans les 2 premières lignes RewriteCond du code original. Par défaut un RewriteCond est lié à un autre RewriteCond par une logique AND . Ceci demandera à Apache d'utiliser OR logique :

RewriteCond %{HTTP_HOST} ^olddomain.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.olddomain.com [NC,OR]
RewriteCond %{HTTP_HOST} ^newdomain.com [NC]
RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,L,NC]

Solution n° 2 : Puisque vous n'avez que 4 noms de domaine au total, il sera beaucoup plus facile d'utiliser l'approche inverse - rediriger à partir de N'IMPORTE QUEL domaine sauf le bon :

RewriteCond %{HTTP_HOST} !^www.newdomain.com [NC]
RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,L,NC]

1voto

pigouina Points 590

Je viens de trouver cette citation :

Les rewriteConds ne s'appliquent qu'à la seule rewriteRule qui les suit.

ici : http://www.webmasterworld.com/apache/3350200.htm

Voici la solution qui fonctionne pour moi :

    RewriteEngine on
    RewriteCond %{HTTP_HOST} ^olddomain.com [NC]
    RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,NC]

    RewriteCond %{HTTP_HOST} ^www.olddomain.com [NC]
    RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,NC]

    RewriteCond %{HTTP_HOST} ^newdomain.com [NC]
    RewriteRule ^/(.*)$ http://www.newdomain.com/$1 [R=301,NC]

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X