Переписать изменения в правилах поведения при использовании вместе

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

  •  08-07-2019
  •  | 
  •  

Вопрос

Каждое из приведенных ниже правил прекрасно работает, если используется отдельно Однако при совместном использовании поведение правил меняется.

Когда набор правил № 2 используется сам по себе, запрос на https: // internal / Security / login переписывается Apache в sapphire / main.php без ведома браузера. Это ожидаемое поведение.

Когда оба набора правил используются вместе, запрос на ранее упомянутый URL приводит к тому, что Apache отправляет перенаправление 301 на http: //internal/sapphire/main.php? url = Безопасность / логин .

Почему Apache отправляет это перенаправление вместо внутренней перезаписи?

# 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]
Это было полезно?

Решение

Флаг L вызывает повторное внедрение уже переписанного URL. Поэтому попробуйте вместо этого проанализировать оригинальный запрошенный URL:

RewriteCond %{SERVER_PORT} =443
RewriteCond %{THE_REQUEST} ^[A-Z]+\ /Security[/?\ ]
RewriteRule (.*) http://internal/$1 [R=301,L]
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top