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 плагины. Я пользуюсь плагином WordPress SEO by Yoast. В его настройках "SEO" - "Постоянные ссылки" - "Канонические настройки" - "Приоритет протокола" указал "Приоритет https".

Переадресация 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 );

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).
    Заранее благодарен за ответ!
    С уважением,

Обсудить