У меня есть следующий код в качестве правила перезаписи.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]
Кажется, это отлично работает с балансировщиком нагрузки с завершением SSL и без него. Мой вопрос:
это 2 условия перезаписи "ORed" и Anded ". Если я удалю RewriteCond %{HTTPS} off
Я получаю бесконечное перенаправление при прямом доступе к веб-серверу. (Мне нужно, чтобы это работало, пока DNS распространяется)
Меня просто сбивает с толку правило
Rewritecond должен быть or: ed, поскольку только одно из условий обычно будет истинным в любой момент времени. Однако для этого потребуется дополнительный синтаксис в виде директивы OR: Можно ли уменьшить rewriteRule до одного правила из нескольких RewriteConds для 301 в htaccess?
Первая rewritecond проверяет, не является ли протокол, используемый соединением, https. Если это разрешено как истина, клиенту отправляется перенаправление на https.
Вторая rewritecond проверяет, был ли уже завершен ssl (например, в балансировщике нагрузки), при этом http-заголовок x-forwarded-proto был введен со значением https. Если значение заголовка не https, клиенту отправляется перенаправление на https.
Удаление первого условия при прямом подключении к серверу приведет к возникновению цикла перенаправления.
Удаление второго условия при подключении через балансировщик нагрузки (или какой-либо внешний узел выполняет завершение) также приведет к возникновению цикла перенаправления.
Я бы попробовал (непроверено, поскольку я на iphone):
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^.*$ https://%{SERVER_NAME}%{REQUEST_URI} [R,L]