2011-01-31 17 views
7

Ho un sito con una serie di vecchie pagine .html e .php che sono state inserite in un CMS.Utilizzo di mod_rewrite e mod_alias (reindirizzamento 301) insieme in .htaccess?

Attualmente nel file .htaccess ci sono circa 30 mod_alias reindirizza il seguente modulo:

redirect 301 /oldpage1.html http://www.example.com/newpage1.php 
redirect 301 /oldpage2.php http://www.example.com/newpage2.php 
redirect 301 /oldpage3.php http://www.example.com/newpage3.php 

Ma vogliamo usare mod_rewrite di avere gli URL nel nostro CMS, che avrà la forma http://www.example.com/pagename.php, così hanno anche la seguente:

RewriteEngine on 
RewriteBase/
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ index.php?page=$1 

al momento entrambi vengono applicati insieme, che si traduce in:

http://www.example.com/newpage1.php?page=oldpage1.html 

Come posso applicare la regola di riscrittura solo quando non può competere è stata fatta dai mod_alias reindirizzamento 301 dichiarazioni, in modo che si verifica quanto segue:

http://www.example.com/oldpage1.html -> reindirizza a -> http://www.example.com/newpage1.php -> che è considerato - > http://www.example.com/index.php?page=/newpage1.php

Qualsiasi suggerimento sarebbe molto apprezzato? Grazie.

risposta

10

ho trovato la risposta in un great explanation of mod_rewrite and mod_alias

Il problema è che mod_rewrite avviene sempre prima mod_alias, indipendentemente dall'ordine del sono posti in .htaccess. Questo è il contrario dell'ordine richiesto per questa situazione.

Il trucco è utilizzare RewriteRule [R=301] anziché redirect 301, e quindi usare mod_rewrite per tutto invece di mixarlo con mod_alias.

soluzione completa è la seguente:

RewriteEngine on 
RewriteBase/

RewriteRule ^oldpage1.html /newpage1.php [R=301,L] 
RewriteRule ^oldpage2.php /newpage2.php [R=301,L] 
RewriteRule ^oldpage3.php /newpage3.php [R=301,L] 

RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.+)$ index.php?page=$1 
Problemi correlati