Як налаштувати https на сайті WordPress і нічого не забути – Ukraine Web

Останнім часом все більше уваги приділяється питанню захищеності і анонімності користувачів. А такі пошуковики як 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-файл
Згадаю три плагіна:
- 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.
Не забувайте перед любими операциями над сайтом стварювати його резервную копію.