301-й редирект с http на https

24439
24.03.2016

Сейчас очень популярны переходы с http на https. В связи с этим есть необходимость в настройке 301-го редиректа с протокола http на протокол https

Для настройки 301-го с протокола http на протокол https существует большое количество способов. Рассмотрю наиболее распространенные из них.

Очень многие панели управления на хостинге позволяют настроить такой редирект установкой соответствующей опции. Это  - самый простой вариант:)

Дальше - несколько вариант редиректа с помощью .htaccess:

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

Данное правило работает, практически, всегда, но на последнем проекте я столкнулся с тем, что такое правило давало циклическую переадресацию (ниже будет причина). Поэтому, техподдержка хостинга посоветовали другое правило:

RewriteCond %{HTTP:X-HTTPS} !1
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Это правило успешно отработало

Также есть возможность настроить такой редиркет не средствами htaccess, а средствами php

if(!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] == ""){
    $redirect = "https://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: $redirect");
}

или

if ($_SERVER["SERVER_PORT"] != 443) {
    $redir = "Location: https://" . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'];
    header($redir);
    exit();
}

Но на том же последнем проекте столкнулся с проблемой, что сервер не отдавал параметр $_SERVER['HTTPS'], а также сайт на протоколе https работал также на 80-м порту, как и http. Поэтому меня спасло только решение, предложенное техподдержкой хостинга



Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

А у меня на оборот, второй вариант дал циклический редирект, а первый прекрасно сработал.
  • Ответить
Настроил, спасибо.
  • Ответить
Если сервер не отдаёт параметр $_SERVER['HTTPS'], тогда надо проверить параметр $_SERVER['HTTP_X_FORWARDED_PROTOCOL']. А еще можно вставить в код страницы и посмотреть что вообще отдаёт сервер.
  • Ответить

Добавить комментарий

captcha

Возврат к списку