Доброго времени суток, дорогие друзья. Когда я создавал блог, я не особо задумывался над приобретением какого-то SSL сертификата для него, но появилась возможность взять бесплатный от Let's encrypt, и на свой страх и риск я взял его. Прошло время и наступил момент рассказать вам как все прошло и насколько это удачно было, да и есть... Давайте, перейдем скорее к делу.
Как я сказал, сертификат я взял от Let's encrypt, он бесплатный на 3 месяца, потом я его обновлю. Взял его в панели моего хостинг провайдера - hoster.ru. Выпущен он был 11.06.2017 и примерно через 1-2 дня я начал перенос своего блога на https (вместо стандартного http). Никакие особые цели я не преследовал этим, всё произошло достаточно спонтанно и быстро.
Как происходил перенос сайта WordPress с http на https:
- Первое и самое главное было направить домен на новый IP в настройках DNS, то есть подключить сам сертификат к домену. Сделал я это просто изменением одной записи A у моего домена culabra.ru. (При выпуске сертификата хостинг провайдер позволял мне скачать сертификат, если сайт расположен где-то еще, либо предоставлялся IP на который нужно направить домен, если хостинг используется их же - это я и сделал).
- Далее необходимо было подключить сам движок WordPress к протоколу https. Вот тут у меня и начались появляться палки в колесах. Разберем давайте этот пункт более детально ниже.
Пойдем по порядку, что я конкретно делал:
Изменил адрес сайта в админ панели WordPress - Настройки - Общие. Поля Адрес WordPress (URL) и Адрес сайта (URL), после этого у меня поехал сайт полностью и отказался работать вообще, по любому из протоколов, выдавало циклическую ошибку. Как решилось это:
В корне сайта WP, в файле wp-config.php прописал:
define('FORCE_SSL_ADMIN', true); define('FORCE_SSL_LOGIN', true); if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) $_SERVER['HTTPS']='on'; define('WP_HOME', 'https://culabra.ru'); define('WP_SITEURL', 'https://culabra.ru'); define('WP_CONTENT_URL', 'https://culabra.ru/wp-content'); |
Теперь открываем файл .htaccess и в любое месте, к примеру в самое начало вставляем:
SetEnvIf X-HTTPS 1 HTTPS=1 |
Этим мы даем понять серверу, что используем теперь https и открывать всё он должен именно по этому протоколу.
Это помогло хотя бы зайти на сайт по обеим протоколам. И казалось бы все хорошо уже началось... Но возникли другие трудности, о них я расскажу чуть позже.
Конечно можно было пойти другим путем и просто поставить плагин, как большинство и делают, НО я не сторонник большого количества плагинов, а потому решил внести правки ручками... Для лентяев или тех кто все же решит поставить плагин, то найти его вы можете на сайте WP: WordPress HTTPS (SSL).
И так после этого как я сказал можно было зайти на сайт по адресу https://culabra.ru, но сертификат все еще не работал как надо (замочек был открыт). Это говорило о том, что на сайте используются где-то адреса с протоколом http, а не https. И верно, во всех постах картинки и к примеру ссылки на какие-то записи с моего блога имели адреса с http, а не с https или же // (относительный адрес //culabra.ru).
Для изменения конечно же придется редактировать либо каждую запись, а это не совсем удобно и разумно, ведь их может быть не 10, а 1000 или даже 100000...
Для изменения можно выполнить следующие SQL запрос в phpmyadmin:
UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://culabra.ru', 'https://culabra.ru'); |
Или же можно сделать адреса сразу относительными, это даст определенную гибкость в дальнейшем, к примеру если вы захотите вернуться на стандартный http протокол:
UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://culabra.ru/', '/'); |
Не забудьте изменить префикс "wp_" на тот, который вы используете, а также адрес culabra.ru на свой адрес сайта.
Сделать это можно также с помощью плагина: Better Search Replace. Он позволит сделать вам тоже самое, но во всех таблицах разом и без особых заморочек, лично я им и воспользовался.
Итак у нас сайт начал работать по протоколу https, все вроде бы хорошо, но как быть с http, по нему ведь также можно зайти на сайт... Проблема эта решается достаточно просто, но я потратил некоторое время на её решение, из-за особенностей своего хостинга.
Делаем 301 редирект с http на https на веб-сервере Apache:
Открываем файл .htaccess и в начале, либо в конце вставляем следующее:
Вариант, который помог мне:
RewriteEngine On RewriteCond %{HTTP:Front-End-Https} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L] |
Вариант, который мне не подошел, но он тоже является рабочим:
RewriteEngine On RewriteCond %{HTTP:X-Forwarded-Proto} !https RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] |
Можете поиграться, попробовать оба варианта, может какой-то вам подойдет, если нет, пишите в комментарии другие постараюсь накинуть. Либо напишите тех. поддержке вашего хостинга и пусть они подскажут вам, как сделать 301 редирект с http на https.
- Идем дальше, теперь когда сайт работает и всё хорошо открывается по https, необходимо в robots.txt заменить также адреса на новые (host и sitemap).
- Вам также потребуется пересоздать/обновить карту сайта, если таковая у вас используется. Так как там были старые адреса сайта, а у вас новые с https.
- После уже можно оповещать поисковые системы о смене адреса.
Начнем с Google. На скриншоте ниже показано как должно быть, как мы видимо нужно добавить в консоль гугла все адреса и вариант сайта, по которым он был доступен или стал доступен.
Также у адреса, который вы использовали изначально нужно "изменить адрес", в настройках сайта это делается, в той же панели вебмастера. Также на новые домены нужно добавить карту сайта, указать её самому (ждать пока робот найдет её и просмотрит, займет больше времени нежели самому всё сделать). С гуглом мы разобрались...
Теперь Яндекс. В яндексе дела обстоят примерно также, вам тоже нужно добавить в Яндекс Вебмастер сайт с https. На скриншоте показано примерно, суть в том, что должно быть в вебмастере 2 адреса сайта, старый с http и новый с https, нужно это для склейки.
На скрине у меня уже произошла склейка этих адресов... Так что у вас будет просто 2 разных сайта как будто.
Далее вы должны в настройках старого адреса сайта в Яндекс Вебмастере в разделе "Индексирование" - "Переезд сайта" отметить галочкой "Добавить https". Не забудьте также как и с гуглом указать новую карту сайта, у нового адреса. После остается ждать только, когда поисковики удалят старые страницы и добавить новые, а точнее просто заменят адрес сайта на нужный нам (с https).
Итоги переезда сайта на https:
Спустя 2 недели начали выпадать страницы из поиска яндекса (за гуглом я особо не следил, да и не слежу), но буквально в течении 1-2 дней начали появляться страницы с новым адресом. И уже через месяц примерно, может полтора, все страницы в яше уже были с новым адресом, в вебмастере также как мы видим по скрину выше произошла склейка этих адресов. Также после начала переезда ТИЦ блога стал равен 0, а был ранее равен 10. Как мне сказали в поддержке яндекса ТИЦ восстановится позднее.
Прошло еще время, и 17.08.2017 - ТИЦ восстановился и даже стал больше, он стал равен 20. Это даже лучше, чем было раньше.
При этом хочу заметить, никаких падений позиций и проседания трафика не было. Сайт работает с той же скоростью имея SSL сертификат.
Вот собственно и всё, что я хотел рассказать. Если у вас остались какие-то вопросы касательно моего переезда или вы хотите посоветоваться по поводу переезда вашего сайта, то пишите в комментариях разберем всё и обсудим. Также если есть дополнения какие-то или может быть я упустил что-то, то также всё кидайте в комменты.
Статья про получение бесплатного SSL сертификата будет чуть позднее, на неделе я бы даже сказал.
Всем спасибо за внимание. Всем удачи!
Как то переносил свой сайт на https, написал пошаговую статейку, статья по переносу http на hhtps.