Apache riscrive più condizioni


9

Ho un sito Web che è stato migrato da un vecchio nome di dominio (ad esempio olddomain.com) a un nuovo nome di dominio (ad esempio newdomain.com).

Per motivi SEO, devo riscrivere tutto il traffico del sito Web sul nuovo nome di dominio principale (ad es. Www.newdomain.com). Sfortunatamente, non so come aggiungere più condizioni di riscrittura di tipo OR. Sembra che con tutte le condizioni, codice di esempio qui sotto, ottengo una condizione 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>

Qualcuno può darmi un piccolo aiuto? Qualsiasi aiuto sarebbe molto apprezzato.

Risposte:


16

Nonostante abbia già trovato la soluzione giusta per te, pubblicherò comunque questo dato che il tuo è ben lungi dall'essere ottimale.

Soluzione n. 1 : sostituisci [NC]con le [NC,OR]prime 2 righe di RewriteCond del codice originale. Per impostazione predefinita, RewriteCond è collegato ad un altro RewriteCond da logico AND. Questo indicherà ad Apache di usare la ORlogica:

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]

Soluzione n. 2 : dato che hai solo 4 nomi di dominio in totale, sarà molto più semplice utilizzare l'approccio opposto: reindirizzamento da QUALSIASI dominio tranne quello corretto:

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

La soluzione n. 2 è la migliore, anche se se hai www.newdomain.come / test.newdomain.como qualcosa del genere, potrebbe essere meglio abbinarla !newdomain.com$finché il vecchio dominio non termina in "newdomain.com" come "thisisanoldnewdomain.com". Più precisamente con il numero 1, non riesco a trovare [OR] documentato da nessuna parte. Funziona davvero?
DerfK,

Documenti @DerfK : devi scorrere un bel po ': "' ornext | OR '(o condizione successiva) Usalo per combinare le condizioni delle regole con un OR locale invece che con un AND implicito."
LazyOne,

1

Ho appena trovato questa citazione:

rewriteConds si applica solo alla singola rewriteRule che li segue.

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

Ecco la soluzione di lavoro per me:

    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]

1
Come nota per chiunque venga qui a visitare anni dopo, la soluzione proposta da LazyOne sopra (e accettata da OP) è molto più ottimizzata, specialmente se si hanno più di due o tre condizioni ORinsieme.
Doktor J,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.