делаем редирект с www на без www c https
  • 1230

Apache - делаем редирект с www на без www c https

Автор: admin | 21 мая (Пн.) 2018г. в 09ч.36м.

Все больше сайтов используют защищенный протокол https.
И для СЕО важно обозначить главный домен, по которому и будет идти трафик на сайт.
Известно, что http://site.com и https://site.com , http://www.site.com и
 https://www.site.com это все разные домены и крайне важно выбрать предпочтительный,и
с других зеркал сделать перенаправления на него.

Здесь я показываю, как перенаправить сайт с www на без-www (или наоборот) и с HTTP
на HTTPS, используя конфигурацию сервера Apache. Для этих целей будет использоваться
файл .htaccess.

Введение

Итак, нужно перенаправить следующие хосты:

http://site.com
http://www.site.com
https://www.site.com

На этот хост:

https://site.com

Я также покажу как перенаправить не-www на 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]​

Если вместо https://site.com вы хотите, чтобы URL-адрес по умолчанию был https://www.site.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] ,
то это значит что если какое-либо из этих двух условий возвращает true, Apache выполнит правило
перезаписи (перенаправление). Первое условие определяет, использует ли запрос
URL-адрес, отличный от HTTPS. Второе условие определяет, использует ли запрос
URL-адрес www. Обратите внимание, что я использовал www \. а не www. , потому что
шаблон является регулярным выражением и. точка здесь имеет особое значение,
поэтому ее нужно экранировать.
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]​

Четвертая строка - удобная строка, которую я использовал, чтобы избежать дублирование
имени хоста непосредственно в URL-адресе. Он соответствует HOST входящего запроса и
разлагает его на www-часть (если есть) и остальную часть имени хоста.
(?:www\.) - это часть регулярки называется пассивная группа. Эта часть убирает www если
оно есть в урле.
Мы будем ссылаться на него позже с помощью алиаса в виде %1 в RewriteRule. Если вы заранее знаете имя хоста, вы
можете улучшить правило, введя URL-адрес и пропустив это условие.
RewriteRule ^ https://www.%1%{REQUEST_URI} [L,NE,R=301]​

До этого были условия, а эта строка - само правило перезаписи.
С помощью этой строки мы сообщаем Apache перенаправить любой запрос на новый

URL-адрес, составленный:

- https://www.  - нужный формат урла
- %1: ссылка на не-www часть хоста
- % {REQUEST_URI}: URI запроса без имени хоста (какие-то параметры get)

Наконец, мы добавляем 3 флага:

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

Замечания

Как я уже упоминал, в моем примере используется дополнительная строка RewriteCond для предотвращения дублирования www хоста.
Однако Вы можете встроить хост непосредственно в правило:
RewriteEngine On
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteRule ^ https://site.com%{REQUEST_URI} [L,NE,R=301]​

Тогда можно обойтись без RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]

Пользуйтесь этими правилами, они простые и вполне эффективные.

Приветствую!

Меня зовут Сергей. Я - автор этого блога.

Если Вам был полезен материал на моем сайте, поддержите пожалуйста мой проект, чтобы о нем узнали другие люди - кликните plizz :) на иконку в соц. сети, чтобы поделиться материалом с другими.