dedlfix: loop verhindern bei redirect-rewrite-kombination

Beitrag lesen

Tach!

RedirectMatch ^/bar(|/.*)$         /foo/bar$1
RewriteRule   ^/foo(/bar(/.*)?)$   $1          [L]
wieso sollte in der zweiten zeile noch ein redirect passieren?

Beim Rewriting wird üblicherweise der Request nach dem Umschreiben intern nochmal eingereiht und durchläuft alle Apache-Adressauflösungsmechanismen noch einmal. Das verhindert auch kein L-Flag, denn das sorgt nur bei der aktuellen Auflösung für eine Nichtbeachtung aller folgenden Regeln. Der neue interne Request weiß vom vorhergehenden L nichts.

Rewrite und Redirect sind zwei eigene Mechanismen im Apachen, die auch nichts voneinander wissen. Man kann beim Rewriting noch mit Umgebungsvariablen tricksen, aber das Redirect ist davon nicht beeindruckbar. Vielleicht musst du bei deiner Lösung die Redirect-Direktiven meiden und alles mit Rewrite machen. Zumindest muss verhindert werden, dass nach dem Rewriten die Redirect-Regeln ausgewertet werden.

Und dann wäre noch die Frage, welcher Apache vorliegt. Der 2.4er hat mit <If expression> ein mächtiges generelles Werkzeug hinzubekommen.

dedlfix.