Редирект с HTTP на HTTPS
Редирект с HTTP на HTTPS, когда веб-сервер, выдающий страницы, находится за обратным прокси-сервером или балансировщиком нагрузки:
- Apache + nginx;
- Поддержка SSL включена;
- SSL-сертификат приобретен, одобрен и установлен.
Вообще всё готово и остается только сделать перенаправление с HTTP на HTTPS. Директивы для файла .htaccess:
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/\ [R=301,L]
RewriteCond %{HTTP:X_FORWARDED_PROTO} !https [NC]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/\ [R=301,L]
Редирект с HTTP на HTTPS
Включить работу механизма преобразования:
RewriteEngine On
Если доменное имя без www:
RewriteCond %{HTTP_HOST} !^www\. [NC]
Тогда заменить его на домен с www:
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/\ [R=301,L]
Если HTTPS отсутствует:
RewriteCond %{HTTP:X_FORWARDED_PROTO} !https [NC]
Тогда заменить домен без HTTPS доменом с HTTPS:
RewriteRule ^(.*)$ https://%{HTTP_HOST}/\ [R=301,L]
Другой вариант редиректа
Обратный прокси-сервер или балансировщик нагрузки может предоставлять веб-серверу информацию о том первоначальном запросе, который он получил. Название протокола (HTTP или HTTPS) может отправляться с помощью заголовка, называемого X_FORWARDED_PROTO или X-Forwarded-Proto или еще как-нибудь иначе.
Поскольку, в зависимости от конкретной конфигурации, обратный прокси-сервер или балансировщик может предоставлять информацию о протоколе, а может и не предоставлять, да еще заголовок может называться по-разному, то как получить название протокола в каком-то числе случаев придется выяснять экспериментальным путем или узнавать у службы технической поддержки хостера.
Но, если для данного сервера это возможно, можно просто установить переменную среды:
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}/\ [R=301,L]
RewriteCond %{HTTP:HTTPS} !on [NV]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/\ [R=301,L]
Документация
- Apache Module mod_rewrite (in English): httpd.apache.org/docs/current/mod/mod_rewrite.html
Теги: 301-Редирект, htaccess, HTTP, HTTPS
- Опубликовано: 23 Января, 2023
- Последнее редактирование: 23 Января, 2023