Приветствую вас на сайте Impuls-Web!
Сегодня мы рассмотрим последний этап перевода сайта на SSL-сертификат, в котором нам нужно настроить редирект с http на https, или, другими словами, перенаправление с нашего прежнего адреса, начинающегося с http://, на новый адрес по протоколу HTTPS.
Навигация по статье:
В предыдущих статьях я рассматривала процесс получения у установки SSL сертификата. Если вы их не читали – вот ссылки:
Нужен ли SSL-сертификат для сайта?
Как получить бесплатно SSL-сертификат для сайта?
Как получить SSL сертификат?
Как установить SSL-сертификат на хостинг?
Переадресация на https через htaccess
Для того, что бы настроить редирект с http на https, вам нужно, при помощи программы Notepad++, в корне вашего сайта открыть файл .htaccess, и далее, в самом начале этого файла, прописать один из нескольких вариантов перенаправления.
Как пользоваться Notepad++ и настроить для него FTP-подключение я рассказывала в одной из прошлых статей, с которой вы можете ознакомиться по этой ссылке:
Редактирование файлов сайта в Notepad++
Все дело в том, что настройки хостинга могут быть разные. Поэтому какого-то универсального синтаксиса для написание перенаправления нет и нужно будет пробовать разные варианты, что бы найти тот, который сработает на вашем хостинге.
Варианты написания серверного редиректа для HTTPS
Мне удалось найти семь основных вариантов, которые используют для настройки редиректа для HTTPS протокола:
Вариант 1
1 2 |
RewriteCond %{HTTPS} =off RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [QSA,L] |
Вариант 2
1 2 |
RewriteCond %{SERVER_PORT} !^443$ RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L] |
Вариант 3
1 2 |
RewriteCond %{ENV:HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] |
Вариант 4
1 2 |
RewriteCond %{HTTP:X-HTTPS} !1 RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] |
Вариант 5
1 2 |
RewriteCond %{HTTP:CF-Visitor} '"scheme":"http"' RewriteRule ^(.*)$ https://www.site.ru/$1 [L] |
Вариант 6
1 2 |
RewriteCond %{HTTP:X-Forwarded-Protocol} !=https RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L] |
Вариант 7
1 2 3 |
RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301,NE] |
Вариант 8
1 2 3 4 |
RewriteEngine On RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] |
После вставки одного из этих вариантов в файл .htaccess, сохраняете изменения.
Проверка редиректа
Затем, для того что бы проверить работает он или нет, переходим в браузер и в адресной строке вводим адрес нашего сайта с протоколом HTTP. Если перенаправление сработает, то у вас должна будет открыться страница вашего сайта с протоколом HTTPS.
Так же, вы можете воспользоваться одним из онлайн-сервисов, которые позволяют просмотреть правильность выполнения редиректа. Например, Redirect Checker. Для выполнения проверки вам нужно:
- 1.Перейти на страницу онлайн-сервиса по этой ссылке
- 2.В поле для ввода указать адрес, с которого должно осуществляться перенаправление в формате http://имя-сайта.ру .
- 3.А затем нажать на кнопку «Analyse».
В результате сервис вам выдаст отчет о правильности работы перенаправления. В моем случае редирект работает не правильно:
Перенаправление вроде бы как происходит, но это происходит несколько раз, и почему то происходит не 301 редирект, а 302. Насколько я поняла, это называется циклический редирект, и такого быть не должно. Поэтому мне нужно пробовать другие варианты.
Так же, вы можете проверить правильность выполнения редиректа для конкретной поисковой системы. Для этого, перед нажатием на кнопку «Analyse», нужно выбрать из выпадающего списка название нужного поискового робота:
После того, как вы добавите свой сайт с протоколом HTTPS в поисковые системы, укажите основное зеркало, дождетесь переиндексации и правильно настроите 301-редирект, ваш переезд на протокол HTTPS можно будет считать завершенным. Для крупного сайта такой переезд может занять от нескольких недель, до нескольких месяцев. Все будет зависеть от того, как долго яндекс будет производить склейку зеркал.
Так же, вы можете назначить 301 редирект сразу после получения и установки с SSL-сертификата, но в этом случае вы рискуете тем, что многие страницы вашего сайта могут на время выпасть из поисковой выдачи.
Я надеюсь, что данная статья поможет вам правильно настроить редирект для HTTPS –протокола и осуществить переход на SSL-сертификат с наименьшими потерями. Если данная статья вам понравилась, делайте репост в социальные сети и подписывайтесь на мою рассылку. Желаю вам успешного переезда и до встречи в следующих статьях.
С уважением Юлия Гусарь
Циклический редирект (перенаправление на самого себя) происходит, если условие в RewriteCond не работает, например сервер некорректно установил соответствующую переменную. В этом случае надо проверить конфигурацию, попробовать другие значения переменных или другие переменные.
ОГРОМНОЕ СПАСИБО, я перепробовал сотни сайтов, но вот совет ставить код в самом верху, а я ставил после конфига WP. Помог вариант:
RewriteEngine On
RewriteCond %{HTTPS} off RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Очень рада, что моя статья вам помогла.
Здравствуйте. Сайт перешел на https, ну и время прошло много. Редирект можно отключать? Или это навсегда?
Редирект нужно оставить.
Доброго времени суток! Подскажите пожалуйста, это нормально что при проверке даёт код: 200 OK и всё 301 редиректа нет. У вас проверяю через предоставленный сервис, там есть 301 и 200. И при этом работает только с вариантом 5.
Здравствуйте, Антон!
При вводе адреса с http у Вас происходит перенаправление на https?
3й вариант подошел мне. спасибо огромное! 2 дня рыл…
И Вам спасибо за комментарий!
Успехов Вам!
Юлия, а если мне нужно только основной домен на https перенаправлять, а зеркала оставить на http (у них нет сертификатов), как в этом случае быть?
Переводите на https только основной домен и указываете его в качестве главного зеркала в robots.txt
спасибо! помог вариант
RewriteCond %{ENV:HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
Юлия, здравствуйте! Я перевела один сайт с http на https, второй сайт не перевела. Проверила по Вашей ссылке (в статье) переведённый сайт. Написано: «Поздравление! Кажется, всё в порядке». Проверила не переведённый сайт (пока переводить даже не планирую). А там написано….. «Поздравление! Кажется, всё в порядке». Похоже, у этого сервиса всегда «всё в порядке»))). Есть ли другие сервисы проверки перехода с одного протокола на другой?
Спасибо!
Была проблема — на локалке работал один вариант, а на сервере отказывался работать, но работал другой, который отказывался работать на локалке. Что только не перепробовал. В итоге варианты 7 и 8 помогли!
Помогите вот тут https://c-wd.ru/uslugi/ настроить переадресацию
Мне помог вариант номер 2. Еще три варианта выдавали неправильное перенаправление, остальные просто не срабатывали.
Спасибо — мне подошёл 3 вариант
Отлично! Спасибо за Ваш комментарий!
Спасибо! Четвёртый вариант помог! А на моём хостинге варианты не подходили! А если я сразу сделал редирект после получения сертификата, и настройки сайта. То все равно же страницы вернутся в поиск? Или вообще исчезнут?
Страницы из поиска полностью не исчезнут. Возможна временная просадка или исчезновение их поиска.
Ну если удалили коммент и не ответили! Тогда и закладку удаляю!
Юлия, здравствуйте! Мне помог 6 вариант. Но теперь редиректит со всех http страниц, на главную c https. Сайт на joomla. Перерыл весь интернет — не нашел информации, как сделать нормально. Если можете помогите мне настроить редиректы.
Вся конструкция на сайте:
# Переадресация на https
RewriteCond %{HTTP:X-Forwarded-Protocol} !=https
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]
# Конец переадресация на https
RewriteCond %{HTTP_HOST} ^www.1stroyka-samara.ru$ [NC]
RewriteRule ^(.*)$ http://1stroyka-samara.ru/$1 [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^index\.php$ http://1stroyka-samara.ru/ [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\/home\.html\ HTTP/
RewriteRule ^home\.html$ http://1stroyka-samara.ru/ [R=301,L]
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\/index.php/component/content/frontpage\.html\ HTTP/
RewriteRule ^index.php/component/content/frontpage\.html$ http://1stroyka-samara.ru/ [R=301,L]
RewriteRule ^index.php/(.*)$ http://1stroyka-samara.ru/$1 [R=permanent,L]
Вроде первый вариант сработал:)
Отлично! Спасибо за Ваш комментарий!
Спасибо
И Вам спасибо!
Спасибо, очень полезная информация
Спасибо!
Отличная статья)
Спасибо!
в адинмке несколько сайтов, редирект на httpS нужен только для одного, вариантов, на сколько вижу, нету