Как правильно сделать 301 редирект в .htaccess


Как cделать 301 Redirect в .htaccess?

Некоторое время тому назад, ко мне обратились друзья из одной Орловской строительной компании, и предложили мне разработать сайт-визитку для их организации.

Обработка кодов сервера в .htaccess

Обработка кодов сервера в .htaccess

Немного подумав, я согласился, и принялся творить!

На создание сайта, ушло буквально пару дней, ведь у меня уже есть самостоятельно разработанные, движки сайтов на PHP, HTML и MySQL. Все только упиралось в оригинальный дизайн, внутреннюю оптимизацию и наполнение сайта контентом. Ну и это для вебмастера, как Вы догадываетесь, тоже не является вопросом.
Движок сайта я тестировал дома, развернув LAMP на Ubuntu и Red Hat, ну и для тестирования совместимости, еще проверял его на Windows 7 и XP-юше:)

И здесь хочется заметить, что все мои манипуляции, не остались тщетны, ибо первое, что я сделал после размещения сайта, так это проверил его в CyberAnalytic, на что последний вернул мне результат 1308, и присвоил статус GOLD! После такого результата, я был ну просто неприлично счастлив.

Но все по порядку. Застолбив хостинг, я перекинул в свой каталог на сервере, движок сайта и создал robots.txt всего с одной инструкцией Псам:

User-agent: *
#Для всех ботов
Disallow: /
#Не нужно ничего индексировать)

Стоит ли говорить, что те в свою очередь, меня поняли правильно, и обходили мой сайт стороной.

Большинство хостингов, предоставляют по умолчанию, домен третьего уровня, вида:

ваш_сайт.их_домен.фу

Вот и мой хостинг, не стал являться исключением. Но на днях я купил нормальное доменное имя, и привязал его к хосту. Вбив в адресной строке браузера адрес сайта, и убедившись в том, что все срослось, как надо, я решил проверить старое доменное имя сайта и был немного разочарован, когда увидел опять свой сайт. Потом я добавил в адресную строку www, и снова шок.
В итоге у меня получилось, аж целых четыре сайта, вместо требуемого одного. :(

Я уже много писал о файле локальной конфигурации веб сервера .htaccess, в отдельно взятом каталоге, и на этот раз, он мне должен был помочь сделать редирект 301, т. е. склеить домены, ведь это ой, как необходимо для нормального продвижения сайта. Ведь, как Вы понимаете его дальнейшая судьба, а так же продвижение и ракрутка в поисковых системах, целиком и полностью ложатся на мои [спортивные] плечи.

Для чего нужно делать редирект и склеивать доменные имена?

Это очевидный вопрос, и многие вебмастера, могут дать на него не менее очевидный ответ, но все же я отвечу на него, авось сгодится новичка.

PR (PageRank) — является коэффициентом, применяемым поисковиком Google при ранжировании предварительно выбранных страниц сайта из своей базы, которые соответствуют определенному поисковому запросу, и выражается PR целым числом от 0 до 10.

Соответственно, если поисковики проиндексируют все четыре домена, то в их базе будет хранится четыре абсолютно разных сайта, с одинаковым содержимым. И здесь, как минимум можно забыть о показателях сайта таких, как PR или тИЦ, а как максимум попасть под фильтр поисковых систем, и поставить крест на его дальнейшем продвижении.

И здесь уместно провести аналогию с умным, но немым философом:
Вроде и сказать есть что, но нечем:)

Для редиректа и склеивания доменов в .htaccess необходимо использовать код ответа Web сервера 301 Permanent Redirect.

Поэтому, кратко расшифрую 301 Redirect:
данный код ответа сервера означает то, что данная страница переехала на новый адрес, на постоянной основе. Поэтому теперь осталась только чисто технически реализовать склейку доменов.

Как сделать 301 редирект в .htaccess

Самым простым способом реализации редиректа 301 в .htaccess является использование директивы:

Redirect 301 / http://www.сайт.ру/

Но этот вариант подходит только в том случае, если редирект делается на другой сервер, ибо склеить домены с его помощью не получится, выскочит ошибка:
Браузер определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится!

Однако, данная инструкция хорошо отработает, если необходимо сделать перенаправление с конкретных страниц сайта на другой домен. Такое, кстати, тоже иногда случается. Альтернативой для редиректа с конкретной страницы может быть директива:

Redirect permanent /страница.html http://другой-домен.ru/другая-страница.html

Поэтому идем на встречу регулярным выражениям .htaccess:)

Кратко:

RewriteEngine on|off
Имеет всего два параметра, и служит для того, что-бы получить доступ к регулярным выражениям .htaccess, через включение модуля веб сервера mod_rewrite


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

RewriteRule является директивой преобразований. И в данном случае, с ее помощью можно сделать редирект, то есть просто перебросить со страниц, которые определяются регулярным выражением RewriteCond.

Суть:

И вот уже я медленно, но верными шагами, плавно подобрался к [жути] сути. В итоге, весь код редиректа и склеивания доменов, поместился всего в несколько строк:

RewriteEngine on

RewriteCond %{HTTP_HOST} ^www.домен.ru$ [NC]

RewriteRule (.*) http://домен.ru/$ [R=301,L]

RewriteCond %{HTTP_HOST} ^старый\.домен\.ru

RewriteRule ^(.*)$ http://домен.ru/$1 [R=301,L]

RewriteCond %{HTTP_HOST} ^www\.старый\.домен\.ru

RewriteRule ^(.*)$ http://домен.ru/$1 [R=301,L]

P.S. При работе с файлом .htaccess на LocalHost, а именно включении директивы RewriteEngine on может появиться ошибка вида: 403 Forbidden, поэтому хочу заметить, что не нужно сразу спешить, и править конфигурационный файл Апача httpd.conf, а всего лишь будет достаточно включить директиву Options +FollowSymLinks, т. е вписать ее перед директивой RewriteEngine. 😉