WordPress: переход на https. Как настроить https и ничего не забыть

wordpress https: как перейти на https

В последнее время все больше внимания уделяется вопросу защищенности и анонимности пользователей. А такие поисковики как Google, даже всячески приветствуют введение https на сайтах: из двух абсолютно одинаковых сайтов в поиске будет занимать позиции выше тот, который с https протоколом, сайты же без https могут быть помечены как не надежные. Так что лучше не упускать возможность обогнать конкурентов на этом новом факторе и следовать тренду - вводить на своем сайте поддержку https-протокола.

С вводом https мы:

  • улучшаем сайт в плане SEO
  • делаем сайт более защищенным - злоумышленники не смогут в незащищенных сетях подслушать какие пароли вводятся на вашем сайте и какие странички посещаются
  • вызываем доверие у посетителей:
    • выделяющаяся зеленая адресная строка с https
    • забота о защите и анонимности посетителей
    • некоторая защита от фишинг-атак

Итак какие действия нужно совершить, чтобы перевести wordpress на https?

В первую очередь разобраться какой вам сертификат нужен, купить его и прописать на хостинге - это рассматривается в статье "HTTPS, SSL сертификаты и форматы сертификатов".

После этого приступаем непосредственно к настройке WordPress.

Вход в админку wordpress только через https

Первым делом защитимся от того, чтобы никто в открытых wifi сетях не смог подслушать ваш пароль при входе в админ панель wordpress.

Открываем файл wp-config.php и прописываем в нем строку:

define('FORCE_SSL_ADMIN', true);

В настройках адреса сайта меняем http на https

В админке wordpress переходим в "Настройки" - "Общие" и указываем "Адрес WordPress (URL)" и "Адрес сайта (URL)" через https. На моем примере вместо http://elims.org.ua пишем https://elims.org.ua

Если ваш wordpress работает в режиме мультисайта, то в админке нет полей "Адрес WordPress (URL)" и "Адрес сайта (URL)". В таком случае понадобится редактировать базу данных: во всех таблицах wp_X_options (где вместо X цифры) в полях:"home","siteurl" и "fileupload_url" указываем адрес через https.

Меняем во внутренних ссылках http на https

Во внутренних ссылках лучше всего использовать относительные адреса, а не абсолютные:

  • абсолютный адрес: https://elims.org.ua/about/
  • относительный адрес: /about/

Относительные адреса не только облегчают перенос сайта с одного домена на другой и переход с http на https, но они не так нагружают хостинг, когда служебные процессы обращаются к этим ссылкам. Только не всегда получается придерживаться этого правила.

Очень часто при публикации какого-либо контента во внутренних ссылках используются абсолютные адреса - так быстрей: скопировал ссылку из адресной строки и вставил в текст, без редактирования и вырезания лишней части. В таком случае во всех внутренних ссылках нужно заменить http на https.

Делаем SQL запрос в базе данных, на примере моего сайта:

UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://elims.org.ua', 'https://elims.org.ua');

Или же можно сразу сделать все ссылки относительными:

UPDATE wp_posts SET post_content = REPLACE (post_content, 'http://elims.org.ua/', '/');

Как делаются такие запросы я уже писал в записи "WordPress: как заменить текст в блоге (базе данных)".

Эта замена происходит только по контенту в записях и страницах. В меню и шаблоне ссылки не затрагиваются чтобы случайно ничего не сломать, изменив какие-либо настройки.

Поэтому было бы еще хорошо обнаружить оставшиеся внутренние ссылки с http. В этом может помочь такой инструмент как Xenu (я о нем писал в записи "SEO: Xenu - бесплатный аудит сайта и мертвых ссылок"):

  • сканируем при помощи Xenu все страницы нашего сайта
  • сортируем адреса по алфавиту и находим внутренние ссылки с http
  • анализируем эти ссылки, узнаем где они могут быть прописаны и переделываем их

Канонические ссылки с https

Когда на сайте одна и та же страница доступна по разным адресам, то канонические ссылки указывают которая из страниц является оригинальной и приоритетной. Таким образом мы сообщаем поисковику какую страницу-дубль включать в индекс. Все другие дубли игнорируются.

Например "http://elims.org.ua" и "https://elims.org.ua" - два разных адреса (в одном http, в другом https), но страница одна и та же. Поэтому убеждаемся что все канонические ссылки указывают на https версии страниц.

В этом могут помочь SEO плагины.

Переадресация 301 с http на https

При помощи 301-го редиректа мы получаем два результата:

  • Сообщаем поисковым системам что "http://elims.org.ua" и "https://elims.org.ua" - это одна и та же страница. А точнее говорим что мы переместили страницу с  "http://elims.org.ua" на "https://elims.org.ua" и просим перенести весь ссылочный вес и прочие "заслуги".
  • Всех посетителей http-версии страницы автоматически переадресовываем на https-версию страницы.

301-ю переадресацию с http на https можно реализовать тремя способами, через:

301 редирект с http на https через .htaccess

Вариантов кодов для редиректа с http на https через .htaccess существует большое количество, я для примера приведу два из них:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [R,L]
</IfModule>

Или еще один код:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{HTTP_HOST} ^yoursite.com [NC,OR]
RewriteCond %{HTTP_HOST} ^www.yoursite.com [NC]
RewriteRule ^(.*)$ https://www.yoursite.com/$1 [L,R=301,NC]
</IfModule>

Не всегда такая переадресация работает, у меня например по началу выбивало ошибку "ERR_TOO_MANY_REDIRECTS" - "На этой странице обнаружена циклическая переадресация".

Но после в справочной информации своего хостинга ukraine нашел код, который заработал и позволил отказаться от плагина.

Рабочая версия код для моего wordpress в режиме мультиблога:

# BEGIN WordPress
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
#for SSL
RewriteCond %{HTTP:SSL} !=1 [NC]
RewriteRule ^(.*) https://elims.org.ua/$1 [L,R=301]

301 редирект с http на https через php-код

Все просто - открываем файл в шаблоне functions.php и прописываем следующий код:

function force_https () {
 if ( !is_ssl() ) {
  wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );
  exit();
 }
}
add_action ( 'template_redirect', 'force_https', 1 );

или еще один вариант, предложенный читателем - именно такой вариант для читателя был рабочим:

<?php
 add_action ( 'template_redirect', 'force_https', 1 );
 function force_https () {
  if ( !is_ssl() ) {
   wp_redirect('https://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );
   exit();
  }
 }
?>

301 редирект с http на https через wordpress плагин

Более опытные веб-мастеры предпочитают обходимся своим кодом и не использовать плагины в тех случаях, когда можно без них обойтись. Это связано с тем, что в плагинах часто реализован лишний функционал, который не нужен и может создавать лишнюю нагрузку. При этом сами плагины могут некорректно работать. Но в данном случае именно этот метод переадресации я предпочел, так, как нашел плагин состоящий всего лишь из нескольких строк php-кода, который опубликован выше. Все-таки активировать и деактивировать плагин более удобней, чем редактировать php-файлы.

Упомяну три плагина:

  • WordPress HTTPS (SSL): можно активировать принудительный вход в админку через https, настраивать https только для определенных страничек\записей, либо для определенных адресов по регулярным выражениям, удалять со страницы весь не https-контент, изменять исходящие ссылки с http на https версии сайтов и пр. Этот плагин заработал не на всех шаблонах.
  • Easy HTTPS Redirection: можно настроить переадресацию для всех страниц или только для определенных. По сути плагин добавляет в файл .htaccess код для редиректа. Но, как я писал выше, этот метод у меня вызывает ошибки "ERR_TOO_MANY_REDIRECTS" - "На этой странице обнаружена циклическая переадресация". При этом после деактивации плагина пришлось вручную удалять его код из файла .htaccess.
  • WordPress Force HTTPS - простой плагин, ничего лишнего. Переадресация реализована через php-код. Именно на нем я остановился.

Рекомендую через некоторое время убедится что поисковики не включают в индекс дубли страниц (http и https версий). Для это возьмите несколько адресов своих страниц и вбейте в гугле запрос подобный моему:

site:elims.org.ua inurl:elims.org.ua/blog/xosting-ukraine-obzor-i-otzyv/

На моем примере я увижу какие версии страницы "elims.org.ua/blog/xosting-ukraine-obzor-i-otzyv/" есть в поисковом индексе. Должна быть лишь одна версия - с https.

Включение HSTS

Строгая транспортная безопасность HTTP (HSTS) — это механизм политики веб-безопасности, с помощью которого веб-сервер указывает, что он поддерживает подключения только по протоколу HTTPS. Это позволяет предотвратить атаки типа "злоумышленник в середине" на SSL.

Эта политика передается сервером агенту пользователя в поле заголовка HTTP-ответа "Strict-Transport-Security". Политика задает период, в течение которого у агент пользователя будет доступ к серверу только безопасным способом.

Пропишите в файле .htaccess следующий код:

<IfModule mod_headers.c>
# this domain should only be contacted in HTTPS for the next 12 months
Header set Strict-Transport-Security "max-age=31536000" env=HTTPS
</IfModule>

Не забывайте перед любыми операциями над сайтом создавать его резервную копию.

Понравилось? =) Поделись с друзьями:

Обсуждение записи “WordPress: переход на https. Как настроить https и ничего не забыть”

  1. Sergej (/compliment.lv) says:

    Здравствуйте, делаю все по Вашей инструкции, но на этапе: SQL запрос в базе данных, показывает ошибку: #1064 — You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘://compliment.lv’, ‘https://compliment.lv’)’ at line 1

    Прописывал запрос так: UPDATE wp_posts SET post_content = REPLACE (post_content, ‘compliment.lv’, ‘https://compliment.lv’);
    Подскажите пожалуйста, в чем проблема?

  2. Владимир Демянович (elims.org.ua) says:

    Sergej, здравствуйте. Думаю проблема в кавычках. Попробуйте поставить двойные кавычки (которые на кнопке с буквой э) или одинарную — ` (которая на кнопке с буквой ё и тильдой (~)), не путайте с одинарной, которая на кнопке с буквой э (‘).

  3. Sergej (/compliment.lv) says:

    Спасибо большое, все получилось. Теперь буду продолжать дальше, надеюсь и дальше все будет хорошо.
    И спасибо большое за этот пост!

  4. Denys says:

    Спасибо огромное! Очень выручила инструкция!

  5. Антон says:

    Здравствуйте!

    При переходи на https в файле Robots.txt путь к карте Sitemap надо тоже изменить на https?

    Спасибо за ответ!

  6. uglion (uglion.ru) says:

    Сообщаем поисковым системам что «https://elims.org.ua» и «https://elims.org.ua» — это одна и та же страница.

    Забавно звучит, учитывая, что это и есть одна и та же страница. И так по всей статье. Видимо при переезде на https ты окончательно заменил все http на https :)

    P.s. Поздравляю с возвращением тИЦа))

  7. Владимир Демянович (elims.org.ua) says:

    uglion, да, действительно делал замену через запрос в базе данных и не учел это =) Спасибо

  8. Соня says:

    Большое человеческое спасибо! :)

  9. Тарас says:

    Пане Володимир , на ukraine.com.ua є можливість безкоштовно створити самопідписний сертифікат . Чи варто переходити на такий сертифікат ?

  10. Владимир Демянович (elims.org.ua) says:

    Нет, нету. В таком случае браузеры будут большими красными буквами предупреждать что сертификат самоподписанный и отпугивать этим посетителей.

  11. Тарас says:

    Якщо не секрет , то де ви замовляли сертифікат для свого сайту , і яка вартість ?

  12. Владимир Демянович (elims.org.ua) says:

    13.15$ на 39 месяцев на https://rus.gogetssl.com/

  13. Velibekov says:

    Здравствуйте.
    Спасибо за инструкцию.
    Некоторое время назад, свой блог перевел на https, однако, все еще ищу решение вот какой проблемы: XML карта сайта выдает все равно http (Yoast SEO). Ставил Google Sitemap — то же самое, идет как .. Как рещить именно эту проблему? Что нужно сделать, чтобы ссылки в sitemap.xml были https?
    Ссылка на блог — в емейле.
    Спасибо!

  14. Николай says:

    От души! Спасибо :-) А то голову ломал, установил SSL, а браузеры ругались… Поменял в настройках WP и вуаля! :-)

  15. Артём says:

    Добрый день, не подскажите, мы перевели сайт на SSL сертификат и теперь перестали отображаться картинки, сайт на WordPress ? я сделал запрос к базе UPDATE wp_posts SET post_content = REPLACE (post_content, ‘my-site.ru’, ‘https://my-site.ru’) но не помогло, в исходном коде страницы картинки указываются так

    как победить?

  16. Владимир Демянович (elims.org.ua) says:

    Добрый день. В настройках сайта укажите адрес с https, и рекомендую выкачать всю базу и произвести поиск в текстовом редакторе на вхождения my-site.ru

  17. Иван says:

    Здравствуйте, Владимир. На Вас последняя надежда, перерыл уже кучу наших и буржуйских форумов.
    После всех этих действий админка в бесконечном цикле переадресаций. Когда прописываю в wp-config $_SERVER[‘HTTPS’]=’on’;
    То появляется окно входа, но выдает сообщение «Извините, вам не разрешено просматривать эту страницу.»
    Где хоть копать. Вроде люди у себя проблему эту порешали, но никто не отписывал как именно нигде((

    И еще, Вы внизу исправьте подписку, а то не понятны первые 2 пункта – они по сути одинаковы))

  18. Владимир Демянович (elims.org.ua) says:

    добрый день.

    define(‘FORCE_SSL_ADMIN’, true);

    пробовали?

  19. Иван says:

    Пробовал(( Вся проблема начинается тогда, когда в настройках ВП меняю путь к сайту. Пробовал менять и вручную в БД, но итог такой же. Сразу после замены в админку не войти.

    Теперь еще и забыл, что прописывал в wp-config, что решало проблему со стилями и скриптами, а то без той строчки не все берут правильный путь и сайт выглядит криво((

  20. Владимир says:

    Добрый вечер!
    Подскажите, пожалуйста, существует какой-нибудь универсальный запрос к базе данных для изменения ссылок с http на https ?
    Почему спрашиваю: после перехода на https перерастала работать функция keep-alive, на хостинге решения не нашел, думаю все дело в базе данных. В админке все ссылки заменил на относительные, а базу данных не трогал, так как все нормально работает. Может ли быть в этом причина?
    П.С.: сервер Apache, не WP (вообще не знаю, какая CMS).
    Заранее благодарен за ответ!
    С уважением,

  21. Pavel says:

    Владимир, подскажите:
    после активизации плагина WordPress Force HTTPS и получения зеленого замочка, его можно деактивировать?
    Плагин супер!
    Спасибо за качественную проработку вопроса о переходе на защищенный протокол!

  22. Владимир Демянович (elims.org.ua) says:

    Если переадресация осуществляется только за счет плагина — то после деактивации будут доступны и http страницы.

    Деактивируйте плагин и проверьте в анонимном режиме браузера происходит ли переадресация с http на https

  23. Pavel says:

    Большое спасибо. После деактивации все нормально работает.

  24. Евгений says:

    Здравствуйте. Вариант редиректа с РНР кодом имеет недостаток. Везде редиректит на https кроме главной странице. Главная по-прежнему доступна по двум адресам: https и http.

  25. Seoart says:

    Привет,

    Использовал запрос UPDATE wp_posts SET post_content = REPLACE (post_content, ‘elims.org.ua’, ‘https://elims.org.ua’);

    Но всё равно еще осталось много страниц где url c http остался. Подскажи почему?

  26. Владимир Демянович (elims.org.ua) says:

    Домен свой использовал в запросе?

    Скачай базу данных и все файлы, сделай поиск по ним http-ссылок с твоим доменом через notepad++

  27. Ника says:

    А вы настраиваете https платно?
    Проблема в том, что я не особо в этом разбираюсь. Дала задание программисту, а он уже 2 недели не может сайт в порядок привести( то меню не работает, то все плагины, то все фотографии пропали, то сертификат слетает.
    Он говорит, что кривой шаблон, делайте другой сайт. Но мне кажется не только кривой шаблон. И не хочет исправлять ошибки.
    Очень нужна профессиональная помощь.

  28. Аскар says:

    а как сделать наоборот, с https на http при помощи functions.php ?

  29. Деми Моторс says:

    Помогла Ваша статья, но дополню:
    замена ссылок на относительные скриптом не рекомендую, некоторые ссылки в массивах и потом не будет правильно тема работать. Рекомендую поискать php скрипт Search-Replace-DB-master — ним очень просто и надежно менять. Проверено на множестве сайтов…

  30. Миша says:

    Спасибо за вашу статью, ваш PHP-код был не полным.
    Рекомендую заменить на:

    Итог, далой аксес, через него мои сайты работали на обоих протоколах((

Обсудить