SSL в WordPress

В данном посту я не стану разбирать часть, связанную непосредственно с покупкой и установкой сертификата, расскажу только про то, что связано с настройкой SSL в WordPress.

Как вы знаете, мой сайт находится на хостинге beget (читать обзор) — всё, что я сделал, это написал в супорт о том, что мне требуется SSL, всё остальное сделали они.

Вообще, на мой взгляд есть два варианта настройки защищенного соединения на сайте WordPress:

  • админка через https, а сайт через http,
  • полностью весь сайт через https.

SSL в админке и для страницы wp-login.php

Если вам нужно, чтобы админка сайта WordPress и страница авторизации wp-login.php были доступны только по защищенному соединению, вставьте эту строку в файл wp-config.php (конфигурационный файл, находится в корне сайта):

define('FORCE_SSL_ADMIN', true);
SSL в админке WordPress

Как сделать, чтобы остальной сайт всегда был без https

Это нужно для того, чтобы страницы вашего сайта не были доступны по двум адресам одновременно (с https и без). Используем 301-й редирект. Код — в functions.php.

/*
 * Запрет SSL для контента
 */
add_action( 'template_redirect', 'true_non_ssl_redirect', 1 );
 
function true_non_ssl_redirect() {
	if ( is_ssl() && !is_admin() ) { // если переход был по протоколу https:// и пользователь находится не в админке
		if ( 0 === strpos( $_SERVER['REQUEST_URI'], 'http' ) ) {
			wp_redirect( preg_replace( '|^https://|', 'http://', $_SERVER['REQUEST_URI'] ), 301 );
			exit();
		} else {
			wp_redirect( 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'], 301 );
			exit();
		}
	}
}

Полностью весь сайт на SSL

  1. Для начала переходим в Настройки > Общие и меняем там http на https:
    SSL на всем сайте WordPress
  2. Переходим в Настройки > Постоянные ссылки и просто жмём кнопку «Сохранить изменения».
  3. Затем нам нужно настроить редирект страниц сайта с незащищенного соединения на защищенное, ведь мы не хотим, чтобы сайт был одновременно доступен по двум урлам, для этого вставляем в основной .htaccess:
    RewriteEngine on
    # если первая строка уже присутствует в вашем .htaccess файле, то второй раз вставлять её ни к чему
    RewriteCond %{HTTPS} !=on
    RewriteRule ^(.*) https://%{SERVER_NAME}/$1 [R,L]
    # дальше пойдут правила постоянных ссылок WordPress, если таковые имеются

    Однако у некоторых хостингов с этим кодом могут возникнуть проблемы, в таком случае не трогайте .htaccess, а вставьте например в самое начало functions.php:

    $use_sts = true;
    if ($use_sts && isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') {
        header('Strict-Transport-Security: max-age=31536000');
    } elseif ($use_sts) {
        header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'], true, 301);
        die();
    }
  4. Уведомляем Google об изменениях:
    1. Заходим в Webmaster Tools
    2. Добавляем туда свой сайт ещё раз, но на этот раз с https://.
    3. Открываем теперь в Google Webmasters сайт с http:// и нажимаем в меню с шестеренкой ссылку «Изменение адреса».
      Изменение адреса в Google Webmaster Tools
    4. Выполняем инструкции гугла и жмём «Отправить».
  5. Уведомляем Яндекс об изменениях:
    1. В директиве hosts в файле robots.txt укажите протокол https://:
      Host: https://truemisha.ru
    2. Вы можете также использовать инструмент Главное зеркало в панели Яндекс Вебмастер.
Подпишитесь, чтобы раз в неделю получать свежие статьи с блога по email.

Смотрите также

Комментарии 6

  • Антон30 мая 2015 в 11:05 #

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

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

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

  • Антон30 мая 2015 в 23:05 #

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

    Пришлось на данный момент отказаться от https: , стоит одна партнерская программа на которой не установлен https- и при открытие сайта выдаёт сообщение что сайт не полностью защищён есть изображение или текст не зашифрованный.

  • Денис Маркевич4 октября 2016 в 16:10 #

    Михаил приветствую!
    Не без помощи твоего сайта переезжаю на https. Можно сказать, что почти всё. Но у меня и у тебя на сайте картинки доступны по двум протоколам.
    Понимаю, что - это не есть хорошо. Хром даёт зеленый замок, Firefox - нет, т.к. ссылки в картинках сделал относительными. Подскажи решение.
    Заранее спасибо.

    • Миша4 октября 2016 в 16:10 #

      Добрый день, Денис!

      Тут важно одно, чтобы ссылки на картинки и вообще на любые файлы были через https://. У меня на сайте везде должны быть зеленые замки, если нет — прощу ссылку :)

      Кстати URL не обязательно указывать как https://, можно просто // — посмотрите в Ctrl + U, как у меня некоторые скрипты подключаются.

      Надеюсь, что правильно понял ваш вопрос.

      • Денис Маркевич5 октября 2016 в 10:10 #

        Миша (для информации), хостеру вопрос задавал по SSL - отправил в ваш блог.

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Комментарии закрыты.
  • Миша: Привет ещё раз, не поверишь, реально не сталкивался с этим вопросом. По теории можно сказать следующее: во-первых,...

  • Миша: Привет, вообще без проблем, делаешь всё через require(), require_once() - выбирай любую, какая больше нравится.

  • Виталий Моргунов: Привет! Не могу разобаться, как я могу контролировать порядок подключения стилей. В моем случае мне нужно чтобы стили...

  • Миша: Спасибо!

  • w0rmak: Это было просто. Нашел код в интернете. Добавьте и себе ymaps.load(function () { var input = document.getElem...