Настройка https на Drupal 7

Перевод сайтов на новый протокол https это уже не очередная seo фишка, а необходимость, к которой рано или поздно придется прийти всем сайтам. В этой статье мы не будем рассматривать что такое https и зачем он нужен, какие виды сертификатов существуют и как их заказывать, я лишь расскажу как правильно перевести на этот протокол сайт работающий на CMS Drupal.

Для ряда своих сайтов я использовал бесплатные сертификаты от Let's Encrypt предлагаемые в панели инструментов (дополнительных услуг) хостингов. Если у вас информационный сайт или интернет магазин где не проводятся онлайн платежи, то такого сертификата будет достаточно.

После того как сертификат был заказан и выпущен для вашего домена (как это сделать не описываю так как у каждого хостинга своя процедура) обязательно убедитесь что теперь сайт доступен по двум адресам, с http:// и https://. Если все в порядке, идем к следующему шагу.

Важно! Пока не спешим вносить правки в htacess и настраивать 301 редиректы. Первое что необходимо сделать, как советует сам Платон Щукин так это:

  1. Приобрести и настроить сертификат безопасности, который выдается соответствующей уполномоченной организацией (центром сертификации).
  2. Сообщить поисковому роботу о том, что сайт стал доступен по новому протоколу, добавив его в форму addurl или в список своих сайтов в Яндекс.Вебмастере.
  3. Указать адрес желаемого главного зеркала с помощью директивы Host в файле robots.txt. Например: Host: https://site.ru
  4. Если домены http и https были признаны зеркалами ранее, то на данном этапе можно сообщить роботу об изменениях в отношении главного зеркала на странице «Настройки индексирования — Главное зеркало» сервиса Яндекс.Вебмастер. Если же этого еще не произошло, этот шаг нужно пропустить, так как сервис не позволит совершить эту операцию. 
  5. Дождаться, пока главное зеркало в группе зеркал сайта будет определено в соответствии с заданными указаниями, это может занять несколько недель. Как только это произойдет, вы увидите соответствующее изменения для подтвержденного сайта в Яндекс.Вебмастере.
  6. При необходимости настроить редирект с неглавного зеркала на главное. Делать это до того, как сайты будут признаны зеркалами, нежелательно, поскольку в этом случае страницы с редиректами будут исключаться из поиска согласно правилам Яндекса по обработке перенаправлений. На время склейки зеркал, по возможности, лучше оставить сайт доступным для робота по обоим адресам.

Делаеться это для того, чтобы минимизировать потери траффика при смене протокола так как если сразу ставить 301 реддирект, то страницы могут вылетать с поиска еще до отого, как новые туда попадут.

Настраиваем 301 Redirect

Теперь, когда зеркала в Яндексе склеились, вносим правки в файл .htaccess. После строки:

RewriteEngine On

добавляем:

  RewriteBase /
  RewriteCond %{HTTP:X-HTTPS} !1
  RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Но не на всех хостингах такой вариант будет рабочим. Например, этот вариант рабочий на хостинге Timeweb но не работает на Beget. Для Beget оказался рабочим такой:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Для Ukraine же почему-то не пошли оба предыдущих варианта, поэтому в моем случае пришлось использовать такой:

RewriteBase /
RewriteCond %{HTTP:SSL} !=1 [NC]
RewriteRule ^(.*) https://вашсайт.net/$1 [L,R=301]

Также, на некоторых хостингах (в моем случае на Timeweb) могут не подгружаться CSS стили, скрипты и картинки. Для исправления этой проблемы идем в файл:

/sites/default/config.php 

находим и раскомментируем (убрать # ) директиву $base_url, (где-то 283 трока), вписав туда вместо сайта примера домен вашего сайта с протоколом https.

$base_url = 'https://вашдомен.org';  

Советую $base_url откоректировать не зависимо подключились ли стили и скрипты или нет.

Описанный выше метод хорош тем, что не требует установки дополнительных друпаловских модулей таких как Secure Pages например.

Также, многие хостинги советуют покупать выделенный IP для сайта работающем на https, но если вам не важен трафик с устаревших браузеров - не покупайте. Список браузеров не поддерживающих с которыми могут быть проблемы без выделенного IP можно посмотреть здесь.

Также не забываем про правку файла Robots.txt, где к директиве Host стоит добавить https. Например если у вас зеркало было без www, пишем:

Host: https://вашдомен.com

И если у вас зеркало с www, пишем:

Host: https://www.вашдомен.com

Правила указанные в файле .htaccess универсальные, и в целом могут работать и использоваться на других CMS. Важно! После проделанных манипуляций проверить ответ сервера через любой сервис, например этот. Сайт с рабочим протоколом https должен отдавать 200 код, все остальные варианты 301. На примере моего сайта:

https://seonomad.net - HTTP/1.1 200 ОК
https://www.seonomad.net - HTTP/1.1 301 Moved Permanently
http://seonomad.net - HTTP/1.1 301 Moved Permanently
www.seonomad.net - HTTP/1.1 301 Moved Permanently

На хостинге Таймвеб у меня была систуация, когда все сделано как описано выше, но код ответа отдавался не 301, а 302. Для решения этой проблемы нужно пройти в панель управления хостинга и в настройках сайта снять все 3 галочки как на рисунке ниже:

panel_upravleniya_hostingom_taymveb_2016-12-09_13-33-20.png

По дибильному как-то. Сначала вам нужно включить галочку "Использовать безопасное соединение", а затем, когда сертификат будет выпущен, отключить ее.

Если у Вас есть свои, лучшие решения, пожалуйста делитесь в комментариях