Ich habe die folgende URL ...
... das ich in folgendes konvertieren möchte:
Ich dachte, ich könnte dies mit der folgenden Regel erreichen:
%Vor%Ich finde jedoch, dass diese Regel wiederholt angewendet wird, was zu einem internen Serverfehler führt. Ich verstehe, dass, wenn der URI mit dieser Regel transformiert wird, der resultierende URI auch der Regel entspricht und daher erneut ad-infinitum angewendet wird.
Mein vorheriges (zugegebenermaßen etwas verschwommenes) Verständnis war, dass das [L] -Flag die weitere Verarbeitung stoppen würde, obwohl ich jetzt verstehe, dass dies nur bedeutet, dass nur die restlichen Regeln übersprungen werden und die Engine zum Umschreiben nicht stoppt die Regeln wieder.
Ich kann dieses Problem beheben, indem ich folgende Bedingung hinzufüge ...
%Vor%... oder indem Sie einen spezifischeren regulären Ausdruck schreiben. Aber was ich wirklich tun möchte, ist eine Möglichkeit zu finden, die Rewrite-Engine daran zu hindern, weitere Übereinstimmungen zu versuchen, sobald diese Regel einmal gefunden wurde. Ist das möglich?
Vielen Dank.
Normalerweise werden 2 Methoden verwendet.
Die erste ist eine Rewrite-Bedingung, die testet, dass die angeforderte Datei keine echte Datei ist. Wenn interne Rekursion auftritt, ist Ihre php / blog.php eine echte Datei und der rewriterule wird nicht zum zweiten Mal ausgeführt. Nebeneffekt ist, dass jede Anfrage für eine Datei, die existiert, nicht neu geschrieben wird (was eine gute Nebenwirkung sein kann)
%Vor%Die zweite Lösung besteht darin, zu überprüfen, dass Sie sich nicht in einer internen Umleitung befinden:
%Vor%Nebeneffekt dieser zweiten Lösung ist, dass die rewriteRule nicht angewendet werden kann, wenn vorher andere Regeln angewendet wurden (wenn Sie eine interne Umleitung nach einem ersten Durchlauf des Neuschreibens tatsächlich ausführen möchten).
Zum Abschluss werde ich eine dritte Methode hinzufügen: das [NS] - oder [nosubreq] -Tag scheint dasselbe zu tun. Verhindern der Regelverwendung nach einer internen Umleitung
Tags und Links apache mod-rewrite