7 Stimmen

Wie kann man Unterverzeichnisse in RewriteCond abgleichen?

Probleme mit der richtigen Regex für RewriteCond

RewriteCond %{REQUEST_URI} !^/foo/

Funktioniert wie erwartet, d. h. es wird nicht die folgende Umschreibung auf alle URLs angewendet, die mit /foo/ beginnen.

RewriteCond %{REQUEST_URI} !^/foo/bar/

Auf der anderen Seite funktioniert es nicht so, wie ich es erwarte. URLs, die mit /foo/bar/ beginnen, werden immer noch umgeschrieben.

Wie gebe ich die richtige Regex für den Ausschluss von Unterverzeichnissen ein?

0 Stimmen

Wie sehen die aktuellen Regeln aus?

0 Stimmen

Es sollte funktionieren. Könnten Sie ein RewriteLog mit einem RewriteLogLevel von mindestens 3 einrichten und es zu Ihrer Frage hinzufügen?

9voto

Gumbo Punkte 617646

Vielleicht ist es die neue URL einer internen Weiterleitung, auf die die Regel angewendet wird. Die L Flagge tut das.

[ ] wenn die RewriteRule eine interne Weiterleitung erzeugt (was häufig beim Umschreiben in einem verzeichnisbezogenen Kontext vorkommt), wird die Anfrage erneut eingereicht und die Verarbeitung wird ab dem ersten RewriteRule .

Wenn Sie sicherstellen wollen, dass der ursprüngliche URL-Pfad nicht mit "/foo/bar" beginnt, überprüfen Sie die Anfragezeile (siehe THE_REQUEST variabel ) statt:

RewriteCond %{THE_REQUEST} !^[A-Z]+\ /foo/bar/
RewriteRule …

0 Stimmen

@Gumbo: Könnten Sie bitte genau erklären, welche Regexp Sie in Ihrem Vorschlag verwendet haben? Bei mir funktioniert sie auch, und ich vermute, dass sie mit dem ersten GET übereinstimmt, aber ich kann das nachfolgende "/" und den Grund, warum es keine Domain vor "/foo/bar/" gibt, nicht verstehen.

0 Stimmen

@Stratboy Ich habe gehofft, dass die verlinkten Seiten alles erklären. Nun, das Muster ^[A-Z]+\ /foo/bar/ prüft die HTTP-Anfragezeile, wie sie vom HTTP-Parser des Servers gesehen wird, und die Bedingung ist nur wahr, wenn das Muster nicht übereinstimmt. Vielleicht ist es die \ das Sie ablenkt, aber das ist immer noch Teil des Musters.

0 Stimmen

Wow - keine Ahnung, warum %{REQUEST_URI} bei mir nicht funktioniert - aber deine Lösung funktioniert. Dankeschön!

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