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

Редирект с 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]

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

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


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]

Другой вариант редиректа

Обратный прокси-сервер или балансировщик нагрузки может предоставлять веб-серверу информацию о том первоначальном запросе, который он получил. Название протокола (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}/$1 [R=301,L]
RewriteCond %{HTTP:HTTPS} !on [NV]
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Документация

Теги: 301-Редирект, htaccess, HTTP, HTTPS

  • Опубликовано: 23 Января, 2023
  • Последнее редактирование: 23 Января, 2023
Яндекс.Директ Google AdWords Bing Ads Amazon Product Ads HTML CSS JavaScript jQuery PHP CMS CMF MODX Wordpress Drupal ExpressionEngine htaccess SEO SEM HTML CSS JavaScript jQuery PHP CMS CMF MODX Wordpress Drupal ExpressionEngine htaccess SEO SEM Яндекс.Директ Google AdWords Bing Ads Amazon Product Ads