Frage

Jeder Regel -Set unten funktioniert einwandfrei, wenn sie alleine verwendet werden. Wenn jedoch zusammen verwendet wird, ändert sich das Verhalten der Regeln.

Wenn der Regelsatz Nr. 2 von selbst verwendet wird, eine Anfrage für https: // intern/Sicherheit/Login wird von Apache ohne Wissen des Browsers nach Sapphire/Main.php umgeschrieben. Dies ist das erwartete Verhalten.

Wenn beide Regelsätze zusammen verwendet werden http: //internal/sapphire/main.php? url = security/login.

Warum sendet Apache diese Weiterleitung, anstatt ein internes Umschreiben durchzuführen?

# Rule Set # 1
# - Forces all HTTPS requests to HTTP, except for security section requests.
#   Example: request for https://internal/abc/ 
#   -> redirected to http://internal/abc/
RewriteCond %{SERVER_PORT} =443
RewriteCond %{REQUEST_URI} !^/Security($|/.*$)
RewriteRule (.*) http://internal/$1 [R=301,L]

# Rule Set # 2
# - Hands request to CMS - web user does not see this behind-the-scenes rewrite
RewriteRule (.*) sapphire/main.php?url=$1&%{QUERY_STRING} [L]
War es hilfreich?

Lösung

Das L Die Flagge führt zu einer Neuüberwachung der bereits umgeschriebenen URL. Versuchen Sie also stattdessen, die ursprüngliche angeforderte URL zu analysieren:

RewriteCond %{SERVER_PORT} =443
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /Security[/?\ ]
RewriteRule (.*) http://internal/$1 [R=301,L]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top