2 Stimmen

Umleitung in Kombination mit einer Rewrite-Bedingung in htaccess

Ich habe eine CMS-gesteuerte Website, bei der ich keine Möglichkeit habe, den Code zu ändern. Was ich erreichen möchte, ist die Erstellung freundlicher URLs, die nur Apaches Mod-Rewrite-Engine verwenden.

Das Problem ist, dass ich eine Endlosschleife erzeuge, weil ich zuerst die ursprüngliche URL (index.php?id=21) auf eine freundliche URL (/friendly/) umleite und dann den Teil "/friendly" wieder auf "id=21" zurückschreibe.

Ich weiß, dass es eine zusätzliche Bedingung oder einen Parameter geben sollte, um eine Schleife in diesem Fall zu vermeiden, aber ich kann keine der möglichen Lösungen zum Laufen bringen.

Hier ist der Code:

RewriteCond %{query\_string} ^id=21$ \[NC\]
RewriteRule /\* /peuterspeelzaal? \[R=301,L\]

RewriteRule ^peuterspeelzaal$ index.php?id=21 \[L\]

3voto

Eric Petroelje Punkte 58501

Ich nehme an, Sie schreiben in beide Richtungen um, um sicherzustellen, dass alte Links auf die neuen freundlichen URLs umgeleitet werden?

Sie könnten einfach einen Dummy-Parameter zu all Ihren "freundlichen" Rewrites hinzufügen, damit sie nicht mit der anderen Regel übereinstimmen:

RewriteCond %{query_string} ^id=21$ [NC]
RewriteRule /* /peuterspeelzaal? [R=301,L]

RewriteRule ^peuterspeelzaal$ index.php?id=21&dummy=1 [L]

3voto

Gumbo Punkte 617646

Sie müssen sich die Anfragezeile en THE_REQUEST um zu sehen, was ursprünglich beantragt worden ist:

RewriteCond %{THE_REQUEST} ^[A-Z]+\ /[^?\ ]*\?id=21\  [NC]
RewriteRule /* /peuterspeelzaal? [R=301,L]

RewriteRule ^peuterspeelzaal$ index.php?id=21 [L]

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X