Назад | Перейти на главную страницу

Принудительное использование HTTPS с балансировщиком нагрузки и без (перезапись .htaccess)

У меня есть следующий код в качестве правила перезаписи.

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]