Frage

Ich habe eine Site mit einer Reihe alter .html- und .php -Seiten, die in ein CMS gesteckt wurden.

Derzeit befinden sich in der .htaccess -Datei ungefähr 30 mod_alias -Umleitungen in der folgenden Form:

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

Aber wir möchten mod_rewrite verwenden, um hübsche URLs in unserem CMS zu haben, was das Formular annimmt http://www.example.com/pagename.php, Sie haben also auch Folgendes:

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

Im Moment werden beide zusammen angewendet, was zu:

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

Wie kann ich die Rewrite -Regel nur dann anwenden, wenn die mod_alias -Umleitung 301 Anweisungen vorgenommen wurde, so dass Folgendes auftritt:

http://www.example.com/oldpage1.html -> Weiterleitet zu ->http://www.example.com/newpage1.php -> was als -> behandelt wirdhttp://www.example.com/index.php?page=/newpage1.php

Irgendwelche Hinweise würden sehr geschätzt? Vielen Dank.

War es hilfreich?

Lösung

Ich fand die Antwort in a Tolle Erklärung von mod_rewrite und mod_alias

Das Problem ist, dass mod_rewrite immer vor mod_alias vorkommt, unabhängig von der Reihenfolge, die in .htaccess platziert sind. Dies ist die Umkehrung der für diese Situation erforderlichen Reihenfolge.

Der Trick ist zu verwenden RewriteRule [R=301] Anstatt von redirect 301, und verwenden Sie daher mod_rewrite für alles, anstatt es mit mod_alias zu mischen.

Die volle Lösung ist wie folgt:

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top