WordPress: перехід на https. Як налаштувати https і нічого не забути

https_to_https

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

З введенням https ми:

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

Отже які дії потрібно зробити, щоб перевести wordpress сайт на https? В першу чергу розібратися який вам сертифікат потрібен, купити його і прописати на хостингу. Після цього приступаємо безпосередньо до налаштування WordPress.


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

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

Відкриваємо файл wp-config.php і прописуємо в ньому рядок:

define ( 'FORCE_SSL_ADMIN', true);

 

 В налаштуваннях адреси сайту міняємо http на https

В адмінці wordpress переходимо в “Налаштування” – “Загальні” і вказуємо “Адреса WordPress (URL)” і “Адреса сайту (URL)” через https. На моєму прикладі замість http://ukr-web.org.ua пишемо https://ukr-web.org.ua.

Якщо ваш wordpress працює в режимі Мультисайт, то в адмінці немає полів “Адреса WordPress (URL)” і “Адреса сайту (URL)”. У такому випадку знадобиться редагувати базу даних: в усіх таблицях wp_X_options (де замість X цифри) в полях: “home”, “siteurl” і “fileupload_url” вказуємо адресу через https.


Міняємо у внутрішніх посиланнях http на https

У внутрішніх посиланнях найкраще використовувати відносні адреси, а не абсолютні:

  • абсолютний адрес: https://ukr-web.org.ua/about
  • відносний адрес: / about /

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

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

Робимо SQL запит в базі даних, на прикладі мого сайту:

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

 

Або ж можна відразу зробити все посилання відносними:

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

Ця заміна відбувається тільки по контенту в записах і сторінках. В меню і шаблоні посилання не будуть зачіпатися щоб випадково нічого не зламати, змінивши будь-які налаштування.

Тому було б ще добре виявити залишилися внутрішні посилання з http. У цьому може допомогти такий інструмент як Xenu (Xenu – безкоштовний аудит сайту і мертвих посилань):

  • скануємо за допомогою Xenu всі сторінки нашого сайту
  • сортуємо адреси за алфавітом і знаходимо внутрішні посилання з http
  • аналізуємо ці посилання, дізнаємося де вони можуть бути прописані і переробляємо їх.

Канонічні посилання з https

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

Наприклад “http://ukr-web.org.ua” і “https://ukr-web.org.ua” – два різних адреси (в одному http, в іншому https), але сторінка одна і та ж. Тому переконуємося що всі канонічні посилання вказують на https версії сторінок.

У цьому можуть допомогти SEO плагіни.


Browsec VPN зашифровує трафік і дозволяє розблокувати заборонені сайти.



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

За допомогою 301-го редіректу ми отримуємо два результату:

  • Повідомляємо пошуковим системам що “http://ukr-web.org.ua” і “https://ukr-web.org.ua” – це одна і та ж сторінка. А точніше говоримо що ми перемістили сторінку з “http://ukr-web.org.ua” на “https://ukr-web.org.ua” і просимо перенести всю контрольну вагу і інші “заслуги”.
  • Всіх відвідувачів http-версії сторінки автоматично переадресовуємо на https-версію сторінки.

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

  •  файл .htaccess
  • php-код
  • плагін

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” – “Ця веб-сторінка має цикл перенаправлень”.

Але після в довідковій інформації свого хостингу  знайшов код, який заробив і дозволив відмовитися від плагіна.

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

# BEGIN WordPress
 RewriteEngine On
 RewriteBase /
 RewriteRule ^index\.php$ - [L]
 #for SSL
 RewriteCond %{HTTP:SSL} !=1 [NC]
 RewriteRule ^(.*) https://ukr-web.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:ukr-web.org.ua/wordpress-perexid-na-https-yak-nalashtuvati-https-i-nichogo-ne-zabuti/

На моєму прикладі я побачу які версії сторінки “ukr-web.org.ua/wordpress-perexid-na-https-yak-nalashtuvati-https-i-nichogo-ne-zabuti/” є в пошуковому індексі. Повинна бути лише одна версія – з https.

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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *