Питерсайт       

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

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

Apache Module mod_rewrite (in English): http://httpd.apache.org/docs/current/mod/mod_rewrite.html

Опубликовано: 21 Сентября, 2017

Последнее редактирование: 7 Октября, 2017

Яндекс.Директ Google AdWords Bing Ads Amazon Product AdsHTML CSS JavaScript jQuery PHP CMS CMF MODX Wordpress Drupal ExpressionEngine htaccess SEO SEMHTML CSS JavaScript jQuery PHP CMS CMF MODX Wordpress Drupal ExpressionEngine htaccess SEO SEMЯндекс.Директ Google AdWords Bing Ads Amazon Product Ads