KOMPX.COM or COMPMISCELLANEA.COM   

Редирект с HTTP на HTTPS в .htaccess

Редирект с HTTP на HTTPS в случае, когда веб-сервер, выдающий страницы, находится за обратным прокси-сервером или балансировщиком нагрузки.

Конфигурация сервера:

То есть, все настроено и работает. Так что осталось только сделать редирект с HTTP на HTTPS. Директивы для файла .htaccess:


RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTP:X_FORWARDED_PROTO} !https [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Комментарии

Включить работу механизма преобразования:


RewriteEngine On

Если доменное имя без www:


RewriteCond %{HTTP_HOST} !^www\. [NC]

Тогда заменить его на домен с www:


RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]

Если HTTPS отсутствует:


RewriteCond %{HTTP:X_FORWARDED_PROTO} !https [NC]

Тогда заменить домен без HTTPS доменом с HTTPS:


RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Примечания

1. X_FORWARDED_PROTO может называться X-Forwarded-Proto или еще как-нибудь иначе. От обратного прокси-сервера или балансировщика нагрузки надо получить сведения о том первоначальном запросе, который он получает. Обратные прокси-сервера или балансировщики нагрузки могут предоставлять веб-серверу эту информацию. Может быть отправлен заголовок X_FORWARDED_PROTO или X-Forwarded-Proto или называемый как-то иначе, содержащий название протокола (HTTP или HTTPS). Так обычно. Но не всегда. Поэтому в каком-то числе случаев возможно придется выяснять экспериментальным путем как именно получить название протокола.

2. Другим вариантом может быть просто установить переменную среды (если для данного сервера это возможно):


SetEnvIf X_FORWARDED_PROTO https HTTPS=on

Тогда директивы для файла .htaccess будут такими:


RewriteEngine On
SetEnvIf X_FORWARDED_PROTO https HTTPS=on
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTP:HTTPS} !on [NV]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

3. Документация Apache Module mod_rewrite: http://httpd.apache.org/docs/current/mod/mod_rewrite.html

Веб-сервера
Ещё