Domanda

Ogni set di regole di seguito funziona bene se usato da solo. Tuttavia, se usati insieme, il comportamento delle regole cambia.

Quando il set di regole # 2 viene usato da solo, una richiesta per https: // internal / Security / login viene riscritto da Apache in sapphire / main.php a insaputa del browser. Questo è il comportamento previsto.

Quando entrambi i set di regole vengono usati insieme, una richiesta per l'URL menzionato in precedenza porta Apache a inviare un reindirizzamento 301 a http: //internal/sapphire/main.php? url = Sicurezza / login .

Perché Apache invia questo reindirizzamento invece di eseguire una riscrittura interna?

# 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]
È stato utile?

Soluzione

Il flag L provoca il reimpostazione dell'URL già riscritto. Quindi prova ad analizzare invece l'URL richiesto originale:

RewriteCond %{SERVER_PORT} =443
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /Security[/?\ ]
RewriteRule (.*) http://internal/$1 [R=301,L]
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top