Редирект с HTTP на HTTPS в .htaccess
Редирект с HTTP на HTTPS в случае, когда веб-сервер, выдающий страницы, находится за обратным прокси-сервером или балансировщиком нагрузки.
Конфигурация сервера:
- Apache + nginx
- Поддержка SSL включена
- SSL-сертификат приобретен, одобрен и установлен
То есть, все настроено и работает. Так что осталось только сделать редирект с 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
Веб-сервера
- Apache + nginx