У меня есть сервер, получающий некоторый трафик от оконечного балансировщика нагрузки SSL - и в этом случае он поступает как HTTP через порт 80 с http_x_forwarded_proto
= "https"
Мне нужно правило mod_rewrite, которое разрешает только прямой HTTPS-трафик или перенаправленный HTTPS-трафик.
У меня пока есть это:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:http_x_forwarded_proto} != https
RewriteCond %{HTTP:http_x_forwarded_proto} != HTTPS
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
но я получаю
RewriteCond: плохие разделители флагов
ошибка.
Что мне нужно исправить, чтобы это работало, и это лучший подход?
Проблема заключалась в пробеле после символа "! =":
Рабочая версия:
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
сложно ...
Если у вас есть балансировщик нагрузки, который всегда использует SSL при связи с сервером, вам нужно пропустить первую проверку, так как она всегда будет верной. (Если вы разгружаете SSL на балансировщике нагрузки, первая строка всегда истинна, если кому-то не удастся напрямую попасть на ваш сервер с помощью SSL, и в этом случае это будет ложно и не будет пытаться перенаправить, поскольку X-Forwarded-Proto
будет отсутствовать.)
Код, который я использую, поскольку мы всегда обмениваемся данными по SSL между ELB и веб-сервером:
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https [NC]
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]