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, если таковые имеются
  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Просто код
  Для того, чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или авторизуйтесь на сайте.
Получайте новости блога по email или следите за мной в социальных сетях.
  • Миша: Да, точно)

  • Владимир: и на третьей строке не хватает скобки ) закрывающей if :)

  • Миша: Добрый вечер! Рекомендую получить ID пользователя через функцию get_current_user_id().

  • Дмитрий: Миша, подскажите пожалуйста, я использую такой редирект, но он не срабатывает: add_action( 'template_redirect', funct...

  • Миша: Ну как не определена - это аргумент функции. Или я просто вас не до конца понимаю.