301 Redirect mit Fragezeichen
Veröffentlicht am 22.12.2006 | Kommentar schreiben | Tags: php, htaccess
Möchte man alte Seiten aus dem Google Index auf neue Seiten weiterleiten, macht man dies mit einer Serverseitigen 301 Weiterleitung per .htaccess Datei.
Sind diese alten Seiten nun in der Form index.php?id=123, so greifen die üblichen Regeln nicht mehr.
Hier ein kleines Beispiel für eine solche Regel:
RewriteRule ^index.php?id=([0-9]*)$ $1.html [L,R=301]
Diese Regel greift jedoch nicht, da das Fragezeichen eine besondere Regelform benötigt.
Hier der richtige Code:
RewriteCond %{QUERY_STRING} ^id=([0-9]*)$ RewriteRule index.php %1.html? [L,R=301]
Erklärung:
Die erste Zeile definiert den Teil der hinter dem Fragezeichen steht. ^id=([0-9]*)$ ist die Regel aus dem ersten Beispiel, jedoch ohne die Datei selbst.
In der zweiten Zeile wird der Teil definiert, der vor dem Fragezeichen steht, also die Datei selbst index.php. Danach wird festgelegt, was mit dem QUERY_STRING passieren soll. Mit %1 wird auf die Variable zugegriffen, die zuvor mit ( ... ) definiert wurde.
Das ? hinter dem Ausdruck %1.html verhindert, dass der QUERY_STRING hinter die Datei gehängt wird.
Danke für den Code und die Erklärungen, hat mir sehr weitergeholfen!
Jep, hilft mir auch jedes mal wieder! Ich kann mir diesen Code einfach nicht merken ... zum Glück weiß ich jedoch immer wo ich nachschlagen muss.
Danke Christian!
Hi,
gerade das mit dem ? - hat mir sehr geholfen, weil mein Query_string sich die ganze Zeit dahinter gesetzt hat, dieser kleiner Fehler hat mich einige Minuten beschäftigt - bis ich den Eintrag hier gefunden habe - danke nochmal !