htaccess 301 редирект с www и без www

Желательно для доменов второго уровня описывать в файле htaccess 301 редирект (перенесен навсегда), указывая явно поисковой машине, какой хост наиболее правильный. Нужно учитывать, что сайты www.site.ru и site.ru (без www), с точки зрения поисковой машины – два разных сайта.

Для сайтов в доменах третьего уровня данная мера не так актуальна, но, для верности можно тоже описывать. Если вы к своему домену третьего уровня решили подставить еще и www, то описывать в htaccess 301 редирект на главное зеркало нужно обязательно.

К моменту написания статьи Яндекс стал самостоятельно определять главное зеркало. Чаще всего приоритет отдается версии без www.

Google в результатах поиска может прекрасно отображать страницы вашего сайта с www или без него.

Почему нужно описывать в htaccess 301 редирект?

Если вы задали в файле htaccess 301 редирект на главное зеркало вашего сайта:

  • Яндекс правильно определит главное зеркало именно то, которое хотите вы, а не то, что он посчитает нужным.
  • Google в результатах поиска так же будет отображать нужный домен.

Дополнительно желательно прописать в файле robots.txt директиву Host: www.site.ru. Вместо www.site.ru – указать главное зеркало вашего сайта.

Варианты 301 редиректа

Рассмотрим директивы в htaccess для 301 редиректа как для варианта с www, так и без www.

Важно: для корректной работы 301 редиректа требуется активировать модуль Apache mod_rewrite! Если модуль не подключен, ваши директивы будут проигнорированы.

301 редирект для сайта С www

Описать в htaccess 301 редирект можно несколькими способами. Приведу наиболее распространенные. Какой использовать вам – решайте сами.

Первый вариант: явное условие по имени домена

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteCond %{HTTP_HOST} ^site.ru$ [NC]
  RewriteRule ^(.*)$ http://www.site.ru/$1 [R=301,L]
</IfModule>

Второй вариант: от противного

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

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteCond %{HTTP_HOST} !^www\.(.*) [NC]
  RewriteRule ^(.*)$ http://www.%1/$1 [R=301,L]
</IfModule>

301 редирект для сайта БЕЗ www

Как и для сайтов с www описать в htaccess 301 редирект для сайта без www можно несколькими способами.

Первый вариант: явное условие по имени домена

В первом варианте ничего хитрого: главное – поменять имя домена на тот, в котором будет использоваться данный набор директив.

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www\.site\.ru$ [NC]
  RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
</IfModule>

Второй вариант: универсальный набор директив без учета имени домена

Этот вариант можно переносить на разные сайты без изменений. Директивы будут работать везде правильно.

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine on
  RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
  RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
</IfModule>

Третий вариант: условие от противного

При использовании этого кода нужно подставить только имя вашего домена. Так же, при желании, можно сделать его универсальным – по аналогии со вторым вариантом.

<IfModule mod_rewrite.c>
  Options +FollowSymLinks
  RewriteEngine On
  RewriteCond %{HTTP_HOST} !^site\.ru$ [NC]
  RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]
</IfModule>

Недостатки использования универсальных вариантов редиректа

Выше были описаны по одному варианту универсальных директив 301 редиректа для сайтов с www и без www.

Кажущиеся преимущество может создавать определенные неудобства для разработчиков. Большинство программистов разделяют версии сайта для разработки и рабочую. Версия для разработки, как правило, работает в локальном домене на компьютере программиста, например: site.local. Эта версия не предполагает варианта с www. Поэтому универсальная директива будет делать 301 редирект и на локальной машине на хост www.site.local.

Решить эту проблему можно двумя способами:

  1. Использовать условия с явным указанием доменного имени.
  2. Прописать вариант с www в файл hosts на компьютере разработчика, например: www.site.local.

2 комментария(ев) для “htaccess 301 редирект с www и без www

  1. Добрый день.
    Буду очень благодарна за ответ.
    Делали редиректы сайта — меняли каталог. Воспользовались готовым модулем для Битрикса.

    А мой программист неверно меня понял и до кучи сделал основным сайтом домен с www.
    Обнаружила случайно, когда уже робот Яндекса поменял главное зеркало.
    Программист ушел на 2 недели в отпуск, очень перенервничала.
    Пришел, поменял файл .htaccess (в него запретил мне лезть, Битрикс можно грохнуть).
    Робот тхт поменяла ранее.

    Сейчас сижу и думаю: может я делаю еще хуже? Оставить в покое с www?

    Заранее спасибо!

    1. Добрый день, Оксана.

      Ничего страшного в этом нет. Просто определитесь какой домен у Вас должен быть с www или без www.

      Выполните настройку .htaccess с 301 редиректом, укажите соответствующий хост в robots.txt и сформируйте sitemap с Вашим доменом.

      Поисковый робот Яндекс сейчас достаточно быстро меняет зеркала.

      Не переживайте, скоро всё вернётся к прежнему виду. Причём, скорее всего, позиции Вашего сайта тоже вернутся в прежнее состояние, хотя и не сразу.

      Если потребуется помощь с Битриксом — обращайтесь. Решим любые вопросы.

Комментарии запрещены.