Question

J'ai un site avec un ensemble de vieilles pages .html et .php qui ont été placées dans un CMS.

Actuellement dans le fichier .htaccess, il y a environ 30 redirections MOD_ALIAS dans la forme suivante:

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

Mais nous voulons utiliser mod_rewrite pour avoir de jolies URL dans notre CMS, qui prendra la forme http://www.example.com/pagename.php, donc ont également ce qui suit:

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

Pour le moment, les deux sont appliqués ensemble, ce qui se traduit:

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

Comment puis-je appliquer la règle de réécriture uniquement lorsqu'aucune correspondance n'a été faite par les instructions MOD_ALIAS Redirection 301, de sorte que ce qui suit se produit:

http://www.example.com/oldpage1.html -> Redirection vers ->http://www.example.com/newpage1.php -> qui est traité comme ->http://www.example.com/index.php?page=/newpage1.php

Des indices seraient très appréciés? Merci.

Était-ce utile?

La solution

J'ai trouvé la réponse dans un Grande explication de mod_rewrite et mod_alias

Le problème est que mod_rewrite se produit toujours avant mod_alias, quel que soit l'ordre où il est passé dans .htaccess. C'est l'inverse de l'ordre requis pour cette situation.

L'astuce consiste à utiliser RewriteRule [R=301] à la place de redirect 301, et donc utiliser mod_rewrite pour tout au lieu de le mélanger avec mod_alias.

La solution complète est la suivante:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top