Корзина
Корзина пуста.

Настройка редиректов

07.01.2021

Настройка редиректов 301 нескольких зеркал на основной домен с использованием https

Мы будем перенаправлять поддомен без www sute.ru, зеркало site1.ru и поддомен зеркала www.site1.ru на главное зеркало www.sute.ru.

Обычная цепочка редиректов при настройке автоматического редиректа 301 нескольких зеркал на один основной домен без использования https выглядит обычно так:

  1. #перенаправляем основной домен без www
  2. RewriteCond %{HTTP_HOST} ^site\.ru$
  3. RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
  4. #перенаправляем зеркало с www
  5. RewriteCond %{HTTP_HOST} ^www.\site1\.ru$
  6. RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
  7. #перенаправляем зеркало без www
  8. RewriteCond %{HTTP_HOST} ^site1\.ru$
  9. RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]

При переходе на https у нас добавляется условие перенаправление основного зеркала http://www.site.ru на https://www.site.ru

Если сделать ее просто по аналогии - то при обращении к основному зеркалу www.site.ru возникает циклический редирект.

Например такой кусок кода в htaccess приведет к тому, что сайт по основному адресу просто не будет доступен:

  1. #ОШИБКА которая вызовет циклический редирект при обращении к главному зеркалу www.site.ru
  2. RewriteCond %{HTTP_HOST} ^www\.site\.ru$
  3. RewriteRule ^(.*)$ https://www.site.ru/$1 [R=301,L]
  4. #перенаправляем основной домен без www
  5. RewriteCond %{HTTP_HOST} ^site\.ru$
  6. RewriteRule ^(.*)$ https://www.site.ru/$1 [R=301,L]
  7. #перенаправляем зеркало с www
  8. RewriteCond %{HTTP_HOST} ^www.\site1\.ru$
  9. RewriteRule ^(.*)$ https://www.site.ru/$1 [R=301,L]
  10. #перенаправляем зеркало без www
  11. RewriteCond %{HTTP_HOST} ^site1\.ru$
  12. RewriteRule ^(.*)$ https://www.site.ru/$1 [R=301,L]

Для исключения такой ошибки в цепочку для основного зеркала надо добавить условие

  1. RewriteCond %{HTTP:X-HTTPS} !1

Результирующий верный код перенаправлений будет выглядеть так:

  1. #перенаправляем основной домен с www если к нему обратились по http
  2. RewriteCond %{HTTP:X-HTTPS} !1
  3. RewriteCond %{HTTP_HOST} ^www\.site\.ru$
  4. RewriteRule ^(.*)$ https://www.site.ru/$1 [R=301,L]
  5. #перенаправляем основной домен без www по любому протоколу
  6. RewriteCond %{HTTP_HOST} ^site\.ru$
  7. RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
  8. #перенаправляем зеркало без www по любому протоколу
  9. RewriteCond %{HTTP_HOST} ^site1\.ru$
  10. RewriteRule ^(.*)$ https://www.site.ru/$1 [R=301,L]
  11. #перенаправляем зеркало с www по любому протоколу
  12. RewriteCond %{HTTP_HOST} ^www\.site1\.ru$
  13. RewriteRule ^(.*)$ https://www.site.ru/$1 [R=301,L]

Мы правильно делаем перенос сайтов на https.