Каждое приведенное ниже правило отлично работает при использовании отдельно. Однако при совместном использовании поведение правил меняется.Изменение правил поведения при использовании вместе
Когда правило №2 используется само по себе, запрос для https://internal/Security/login переписывается Apache на сапфир/main.php без ведома браузера. Это ожидаемое поведение.
Когда оба набора правил используются вместе, запрос на упомянутый выше URL-адрес приводит к тому, что Apache отправляет 301 перенаправление на http://internal/sapphire/main.php?url=Security/login.
Почему 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]
Спасибо, Gumbo. Ваш ответ дал мне ключ, который мне нужен для решения этой проблемы. Я добавил эту строку в набор правил №1: RewriteCond% {REQUEST_URI}! ^/Sapphire/main.php $ –