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]
Foi útil?

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]
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top