Réécrire les changements de comportement des règles lorsqu'ils sont utilisés ensemble

StackOverflow https://stackoverflow.com/questions/1638119

  •  08-07-2019
  •  | 
  •  

Question

Chaque ensemble de règles ci-dessous fonctionne correctement s'il est utilisé seul. Cependant, lorsqu'ils sont utilisés ensemble, le comportement des règles change.

Lorsque le jeu de règles n ° 2 est utilisé seul, une demande de https: // internal / Security / login est réécrit par Apache en saphir / main.php à l'insu du navigateur. C'est le comportement attendu.

Lorsque les deux ensembles de règles sont utilisés ensemble, une requête pour l'URL mentionnée précédemment aboutit à l'envoi par Apache d'une redirection 301 vers http: //internal/sapphire/main.php? url = Sécurité / connexion .

Pourquoi Apache envoie-t-il cette redirection au lieu d'effectuer une réécriture interne?

# 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]
Était-ce utile?

La solution

L'indicateur L provoque une réinjection de l'URL déjà réécrite. Essayez donc d'analyser l'URL demandée d'origine à la place:

RewriteCond %{SERVER_PORT} =443
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /Security[/?\ ]
RewriteRule (.*) http://internal/$1 [R=301,L]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top