O Apache reescreve várias condições

6

Eu tenho um website que migrou de um nome de domínio antigo (por exemplo, olddomain.com) para um novo nome de domínio (por exemplo, newdomain.com).

Por motivos de SEO, preciso reescrever todo o tráfego do website para o novo nome de domínio principal (por exemplo, www.newdomain.com). Infelizmente, não sei como adicionar várias condições de reescrita do tipo OR. Parece que, com todas as condições, código de exemplo abaixo, recebo uma condição 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>

Alguém pode me ajudar um pouco? Qualquer ajuda seria muito apreciada.

    
por gurun8 22.07.2011 / 20:15

2 respostas

11

Apesar do fato de você já ter encontrado trabalho para sua solução, ainda postarei isso, pois o seu está longe de ser ideal.

Solução # 1 : substitua [NC] por [NC,OR] nas primeiras 2 linhas RewriteCond do código original. Por padrão, um RewriteCond é vinculado a outro RewriteCond pelo lógico AND . Isso instruirá o Apache a usar o OR logic:

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]

Solução # 2 : como você tem apenas 4 nomes de domínio no total, será muito mais fácil usar uma abordagem oposta - redirecionar de QUALQUER domínio, exceto o correto:

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

Acabou de encontrar esta citação:

rewriteConds apply only to the single rewriteRule that follows them.

aqui: link

Aqui está a solução de trabalho para mim:

    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]
    
por 22.07.2011 / 20:31