Как сделать и зачем нужен 301 редирект

redirectВ первую очередь, перед тем как переходить непосредственно к действиям, хочется описать в нескольких предложениях, что такое 301 редирект и для чего он используется.

301 редирект нужен для того, что-бы перенести сайт на постоянной основе на новый адрес, который указывается в http заголовке. Пользователи, которые заходят на сайт, а также поисковые боты благодаря 301 редиректу будут перенаправляться по новому адресу.

При 301 редиректе получается склейка старого и нового адреса сайта. Параметры ТИЦ и ПР также будут переданы новому адресу URL.


Недавно я писал статью о том как определить главное зеркало сайта, она тоже может быть полезна в рамках этой темы. Там происходит склейка адреса сайта с www и без www. Но когда надо склеить два разных домена и при этом сохранить вес старого при переносе на новый, то нужно использовать 301 редирект. Также 301 редирект может использоваться при переносе страницы сайта, например при смене CMS.

Редирект можно выполнить различными способами, которые зависят от програмного обеспечения.

Ниже я приведу способы, которые можно использовать для осуществления редиректа.

301 редирект www на без-www

Применяется когда нужно перенаправить с URL вида http://www.site.ru на http://site.ru.

Необходимо вносить изменения в файл .htaccess в корневой директории сайта.

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www.site\.ru$ [NC]
RewriteRule ^(.*)$ http://site.ru/$1 [R=301,L]

Редирект всех файлов в папке на один файл

Если вам больше не нужен определенный раздел сайта (например new1) и нужно перенаправить все запросы к папке (/new1) на один файл /new.php

Для этого в .htaccess добавляем следующий код

RewriteRule ^new1(.*)$ /new.php [L,R=301]

В случае если требуется перенаправить все файлы кроме одного, например:
все файлы из папки /new1 должны редиректится на файл /new.php, кроме файла /new1/photos.html, который должен перенаправляться на /new_photos.html, пишем следующий код:

RewriteRule ^new1/photos.html /new_photos.html [L,R=301]
RewriteRule ^new1(.*)$ /new.php [L,R=301]

Редирект динамического URL на новый файл

Если есть необходимость сделать редирект динамического URL на новый статический файл

RewriteRule ^article.jsp?id=(.*)$ /news.htm [L,R=301]

То есть теперь, запрос к файлу вида http://www.site.ru/article.jsp?id=3232 и/или http://www.site.ru/article.jsp?id=8745 будет отправлен на файл http://www.site.ru/news.htm

Редирект с помощью директивы Redirect или RedirectPermanent модуля mod_alias

Для использования необходимо включить модули mod_alias (для поддержки директив Redirect, RedirectPermanent и RedirectMatch) и/или mod_rewrite (для использования реврайта) в php.ini

Redirect 301 /old-page.html http://new-domain.ru/new-page.html
или
Redirect permanent /old-page.html http://new-domain.ru/new-page.html

Однако, у этого способа есть недостаток — все адреса, которые необходимо перенаправить, нужно перечислять один за одним, каждый отдельно.

[featured]Спонсор статьи: Чтобы ваши сайты всегда были доступны для пользователей и быстро загружались, нужно выбирать качественный хостинг, который отвечает всем этим требованиям.[/featured]