Результатом правила перезаписи HTACCESS в цикле перенаправления - PullRequest
0 голосов
/ 27 апреля 2019

Я настроил Apache за прокси-сервером NGINX, и мое правило перенаправления (перезаписи) HTTPS приводит к циклу перенаправления. Похоже, что HTTPS возвращается как false, несмотря на то, что я правильно устанавливаю переменную окружения.

Мое правило перезаписи:

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\.example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [L,R=301]

Мои экологические переменные:

SetEnvIf X-Forwarded-Proto https HTTPS=on
SetEnvIf X-Forwarded-SSL on HTTPS=on

И когда я делаю var_dump в PHP, я вижу, что переменные установлены правильно:

[HTTPS] => on

Мне интересно, почему RewriteCond %{HTTPS} off [OR] всегда возвращает true, даже если URL-адрес доступен по HTTPS и установлена ​​переменная среды? Любая помощь будет принята с благодарностью.

p.s. В качестве исправления, если я использую RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC] вместо RewriteCond %{HTTPS} off [OR], цикл перенаправления пропадает.

1 Ответ

1 голос
/ 27 апреля 2019

Значение переменной %{HTTPS} обрабатывается mod_ssl, но в вашем случае, поскольку https обрабатывается nginx, а не Apache, %{HTTPS} равно off.

Также эта переменная не является средойпеременная, поэтому ваш SetEnvIf не может быть распознан, вы должны написать %{ENV:HTTPS}.Но, стоит отметить, что SetEnvIf интерпретируются после mod_rewrite, поэтому он не будет работать ни.

В вашем случае, как вы выяснили, правильный путь - использовать RewriteCond %{HTTP:X-Forwarded-Proto} !=https [NC].

...