Reescrever regras, mudanças de comportamento quando usadas em conjunto
-
08-07-2019 - |
Pergunta
Cada conjunto de regras abaixo funciona bem quando usado sozinho.No entanto, quando usadas em conjunto, o comportamento das regras muda.
Quando o conjunto de regras nº 2 é usado sozinho, uma solicitação de https://interno/Segurança/login é reescrito pelo Apache para sapphire/main.php sem o conhecimento do navegador.Este é o comportamento esperado.
Quando ambos os conjuntos de regras são usados juntos, uma solicitação para o URL mencionado anteriormente faz com que o Apache envie um redirecionamento 301 para http://internal/sapphire/main.php?url=Security/login.
Por que o Apache envia esse redirecionamento em vez de reescrever internamente?
# 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]
Solução
O eu flag causa uma reinjeção do URL já reescrito.Portanto, tente analisar o URL original solicitado:
RewriteCond %{SERVER_PORT} =443
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /Security[/?\ ]
RewriteRule (.*) http://internal/$1 [R=301,L]