Mam stronę z CMSem, który używa mod_rewriteaby adresy URL wyglądały czystsze. Wcześniej czyste adresy URL miały rozszerzenie .htm, ale chcę je przekazać jako fałszywe podkatalogi, IE:
http://www.example.com/pagename/
Mam dwie reguły przepisywania, aby przepisać zarówno stary schemat, jak i nowy:
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+).htm$ index.php?page=$1 [QSA]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ index.php?page=$1 [QSA]
Mój problem polega na tym, że zasada, której próbowałem użyć, aby przekierować stare adresy URL do nowych, nic nie robi.
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+).htm$ $1/ [R=302,NC,QSA]
Odpowiedzi:
1 dla odpowiedzi № 1Nie możesz użyć dwóch reguł o tym samym wzorzeponieważ tylko pierwsza z nich zostanie zastosowana. Spróbuj zastąpić regułę "przepisywania" nową regułą "przekierowania", aby stare przekierowania były przekierowywane zamiast tylko przepisywane:
# redirect foo.htm to foo/
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+).htm$ $1/ [R=301,NC]
# rewrite foo/ to index.php?page=foo
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ index.php?page=$1 [QSA]