301 редирект
Пять вещей, которые должен знать любой вебмастер:
1. Язык гипертекстовой разметки HTML (XHTML)
2. CSS - язык стилей
3. JavaScript
4. PHP. Можно и другой скриптовый язык, например Perl, но PHP все же будет очень полезно знать.
5. Mod_rewrite.
Конечно, список можно дополнять. Тем более что хороший вебмастер непрерывно учится по ходу работы.
Зачем нужно знать mod_rewrite? Это модуль Apache, который сделает за вас уйму работы. Одно из применений mod_rewrite (и PHP, и…) - 301 редирект. Остановимся на нем подробнее.
Это очень полезная функция, которую можно реализовать разными способами. 301 - это код серверного сообщения “Moved Permanently”, то есть сообщение о том, что данный URL теперь живет по другому адресу. Применений для такого редиректа - масса, начиная от склеивания урлов с www и без, и заканчивая акробатикой с Linkbaiting’ом (об этом подробнее расскажу потом).
Например нужно поклеить урлы вашего сайта с www и без. Если урлы не склеены, то поисковики считают их разными сайтами. Робот читает domain.com и вносит его в индекс, потом приходит по другой ссылке на www.domain.com и вносит в индекс его. Получается у вас есть 2 разных сайта с одинаковым содержимым и разделенными ссылками (часть ссылок - на domain.com, часть - на www.domain.com). Ссылочное падает, контент дублируется - ничего хорошего. Будем исправлять.
Очень хороший способ склеивания - 301 редирект. Есть много путей его реализации. Вот пример реализации 301 редиректа через mod_rewrite:
Options +FollowSymlinks
RewriteEngine on
rewritecond %{http_host} ^domain.com [nc]
rewriterule ^(.*)$ http://www.domain.com/$1 [r=301,nc]
Этот код нужно поместить в файл .htaccess. В результате ваш домен domain.com будет передавать ссылочное на www.domain.com (это и будет ваш основной домен). Аналогично можно сделать основным доменом домен без www:
RewriteEngine on
Options +FollowSymlinks
RewriteBase /
RewriteCond %{http_host} ^www.domain.com$
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
Также 301 редирект можно использовать, когда ваш сайт переезжает. То есть вы переходите с domain.com на newdomain.com. Используя 301 редирект, вы не потеряете работу по продвижению старого домена. В .htaccess старого домена пишем:
Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]
Mod_rewrite - это модуль сервера Apache, поэтому он применим не для всех случаев. Более гибкий вариант - редирект средствами PHP:
Header( "HTTP/1.1 301 Moved Permanently" );
Header( "Location: http://www.newdomain.com" );
?>
Как всегда, проще всего программить на Perl:
$q = new CGI;
print $q->redirect("http://www.new-url.com/");
Еще есть много вариантов реализации 301 редиректа - для разных серверов и разных конфигураций. Всегда можно воспользоваться Гуглей.
Переезд на новый домен - это конечно хорошо, но можно найти и более интересное применение 301 редиректа. 301 редирект в этом случае является заключительной частью одного из способов linkbaiting’а. Этот способ наращивания количества внешних ссылок был применен на seomoz.org и принес за пару месяцев 100К+ входящих ссылок (и никакого спама). Состоял эксперимент вот в чем: на отдельном домене 2-3 месяца проводился какой-то конкурс, о котором было написано в digg, другие социалки, на форумы и так далее. На конкурсы и голосования линкуются только в путь - количество ссылок растет как снежный ком. Например сейчас будет проводиться новый конкурс от Google - и таких вот ссылок, как в этом посте, через месяц-другой будет 100К+ как минимум. Так вот, через месяц-другой конкурс закончился, но ссылки-то остались! На домене конкурса поставили 301 редирект на seomoz- так seomoz получил еще плюс 100К+ естественных добровольных ссылок. Вот так все радужно получилось.
Может возникнуть вопрос об отношении поисковых систем к 301 редиректу. Так вот, к 301 редиректу ПС относятся хорошо.
Еще почитать:


23.07.2007 в 1:29 pm
Спасибо за советы, как раз начинаю в этой области, буду рад если поделитесь опытом.
23.07.2007 в 5:41 pm
Поделюсь по мере возможности
. Если интересно что-то конкретное - задавайте вопросы.
30.07.2007 в 4:05 pm
Хорошая статья. для начала.
Спасибо.
15.08.2007 в 8:45 am
Интересно и полезно! Спасибо
15.08.2007 в 12:32 pm
На здоровье. Хочешь отблагодарить - поставь на меня ссылку
Шутка. Хотя в каждой шутке есть доля шутки…
14.09.2007 в 12:41 am
По-моему проще прятать аффилейтные линки php-шным header-ом а не через Mod_rewrite.
14.09.2007 в 10:52 am
Суть от этого не изменится
28.09.2007 в 11:39 am
Блин, полезная статья! Я раньше и не задумывался об этом ! Спасибо большое, буду применять!
27.10.2007 в 1:05 am
Ну что ж попробую… как раз такая необходимость появилась. Спасибо за инфу!
27.10.2007 в 9:08 am
Полезно! Начало правда не оч. понятно…
07.11.2007 в 6:26 pm
Здравствуй автор)) Хотелось бы спросить о назначении оследней буквы “L” в строке RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L] и почему в самом первом примере вместо еёйной стоит nc
07.11.2007 в 8:40 pm
Привет. Все просто.
В скобки [] заключаются флаги к правилам mod_rewrite. Можно например писать RewriteRule … [R=301,NC,L и другие флаги через запятую]. В примерах указаны разные опции. NC - no case (учет регистра при сравнении с шаблоном), L - symbolic link, ну и так далее. Опций много; если нужно составить какое-нибудь сложное правило - смотрите офиц. документацию:
http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
25.11.2007 в 3:21 pm
Полезная инфа! А насчет конкурсов так вообще супер, никогда не использовал этот способ повышения поулярности (только как участник), и вот теперь задумался, может быть стоит попробовать? На каждом сайте по конкурсу, придется сервер покупать!
25.11.2007 в 4:52 pm
Конкурсы хорошо работают для буржуев - они ссылок на свои мнения не жалеют
26.02.2008 в 11:17 am
Спасибо за статью
12.03.2008 в 5:04 pm
Спасибо
Уже начинаю пробовать!
19.04.2008 в 12:24 am
Ух ты, интересная инфа, а что там насчет другого применения mod_rewrite?
08.05.2008 в 11:13 am
> насчет другого применения mod_rewrite?
Формирование Хуман ридабле урлов. Ходишь по сайту в виде domain.com/123/456/qwerty
а модрерайт делает
domain.com/index.cgi?category=123&user=456&search=qwerty
например. Но такие урлы получает только веб-сервер.