Убираем www и перенаправляем на защищенный протокол в Apache

Мне кажется прошло время, когда приставка www была чем-то необходимым при создании сайта. Сейчас больше ценится лаконичность адреса, наличие шифрования (HTTPS) и единого домена для лучшей индексации (canonical).

В этой статье мы рассмотрим настройку веб-сервера Apache для того чтобы перенести пользователя на домен без или с приставкой www в защищенном режиме.

Вступление

Тут я покажу как настроить сайт, чтобы убрать www (или наоборот) и поменять HTTP на безопасный HTTPS, используя конфигурацию сервера Apache. Если быть точным, конфигурация перенаправит следующие адреса:

http://example.com
http://www.example.com
https://example.com

на

https://example.com

Я также покажу небольшое изменение, с помощью которого можно добавить www в адрес(если вы предпочитаете с www).

Конфигурация Apache

Чтобы переадресация работала, добавьте следующее в конфиг Apache, если у вас есть к нему доступ, или в .htaccess в корневой папке вашего сайта:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

Если вместо example.com вы хотите, чтобы адрес сайта был www.example.com, просто измените третью и пятую строчки:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

Как это работает

Так как я не любитель бездумного копирования, давайте попытаемся понять как работает эта конфигурация. Это поможет вам делать необходимые модификации, если потребуется.

RewriteEngine On

Первая строчка включает возможность перезаписи Apache, которая требуется для переадресации. Возможно вы уже сделали это в предыдущем изменении. Если да, то просто пропустите эту строчку.

RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} !^www\. [NC]

Эти две строчки — условия переадресации, они используются, чтобы определить нужна ли переадресация. Так как в условиях используется ИЛИ [OR], при выполнении хотя бы одного условия, Apache запустит правило перезаписи(переадресацию).

Первое условие определяет использовался ли адрес без HTTPS шифрования. Второе условие определяет использовался ли адрес с www. Заметьте, что я использовал www\. , а не www. , так как \ делает из . точки просто точку( . точка имеет в конфигурации свою функцию, поэтому лучше её избегать).

RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]

Четвёртая строка раскладывает адрес на составляющие: www(если существует) и остаток адреса. Позже мы обратимся к этому при помощи %1 в правиле перезаписи.

Если вам известно имя хоста, то вы можете не использовать эту проверку(смотрите дальше).

RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]

Правило перезаписи — это основа переадресации. Этой строкой мы говорим Apache переадресовать любой запрос на новый адрес:

  • https://www.
  • %1: ссылка на остаток адреса (без www)
  • %{REQUEST_URI}: URI запроса, без имени хоста

Все эти токены соединяются вместе и получается финальный URI переадресации. И в конце мы добавляем 3 флага:

  • NE не избегать специальных символов
  • R=301 использовать HTTP 301 статус переадресации
  • L не обрабатывать другие правила и переадресовать немедленно

Заметки

Как я уже говорил, мой пример использует условие перезаписи, чтобы извлечь имя хоста и не вписывать его в правило. Если вы считаете, что это повлечёт ухудшение производительности, вы можете вписать хост прямо в правило:

RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,NE,R=301]

Вывод

Эта статья позволяет настроить простую переадресацию www и HTTP( не HTTPS) запросов к каноническому домену сайта. Это очень полезно, чтобы избежать проблему повторений с поисковыми системами, а так же облегчает серфинг вашим пользователям.

Существует множество способов осуществить переадресацию в Apache, это всего лишь один, и он не раскрывает все возможности. Я надеюсь, что обьяснение в параграфе «Как это работает» поможет вам настроить его под свои нужды.