HTTP/1.1 301 Moved Permanently — ответ сервера, обозначающий что адрес страницы был изменен навсегда (permanently). 301 редирект применяется в случае:
- сменился адрес сайта;
- когда страница (группа страниц, раздел) сайта сменила свой адрес (URL);
- когда необходимо «склеить» копии сайтов/страниц (зеркала);
Применяя 301 редирект мы обычно преследуем за цель:
- при переходе по старому адресу, попадать на новый;
- избавиться от дублирования страниц (в том числе со слешем вконце);
- склеить http://www.site.com и http://site.com (и httpS://sites.com);
- склеить http://IP-адрес или служебный домен http://site.hosting.com;
Не следует применять 301 редирект в случае:
- для кратковременных переадресаций (используйте 302 Moverd Temporarily);
- если с доменом случился бан или фильтр, 301 редирект перенесет проблемы со старого на новый. И в итоге ничего не изменится;
- множественных редиректов (не в один шаг, а в два и более);
- стремитесь минимизировать количество редиректов внутри сайта;
При смене адреса сайта очень важно чтобы при обращении к старому адресу пользователь попадал на ту же самую страницу (а не на главную), но на новом домене. Если есть сайты «сателиты» (копии сайта в другой зоне и т.п.) — очень важно чтобы присходил 301 редирект на основной сайт. Ни в коем случае нельзя допустить, чтобы по всем адресам была доступна копия одного и того же сайта.
Загляните также в инструменты вебмастера Яндекс или Google: Индексирование сайта -> Исключенные страницы, Конфигурация -> Парметры URL.
Примеры 301 редиракта через .htaccess
:
Редирект для домена с www.site.com на site.com.
RewriteCond %{HTTP_HOST} ^www\.(.*) [NC] RewriteRule ^(.*)$ http://%1/$1 [R=301,L]
Простой редирект страницы на новый адрес, самый простой случай.
Redirect 301 /about.php http://site.com/about2.php
Пример 301 редиректа, при смене адреса страницы (убираем из пути «blog/«).
RewriteRule ^blog/category/(.*)$ category/$1 [R=301,L] RewriteRule ^blog/post/(.*)$ post/$1 [R=301,L]
Убираем GET-параметры при редиректе: /view_post?id=85 —> /post/85.
RewriteCond %{QUERY_STRING} ^id=(.*) RewriteRule ^view_post\.php$ /post/%1? [L,R=301]
Убираем http://site.com/category/index.php в адресе страницы.
RewriteRule ^(.*)index\.php$ $1 [R=301,L]
Избавляемся от параметров или меток в адресе.
Пример 1. Обрезка лишних параметров http://site.com/page.php¶m=*.
RewriteCond %{REQUEST_URI} ^(.*)\¶m= [NC] RewriteRule ^(.*)\¶m=(.*)$ $1 [R=301,L]
Пример 2. Обрезка http://site.com?utm_source=*.
RewriteCond %{QUERY_STRING} ^utm_source= [NC] RewriteRule (.*) $1? [R=301,L]
Пример 3. Избавление от языка ?lang=ru.
RewriteCond %{QUERY_STRING} ^lang=ru$ RewriteRule ^(.*)\.php\?(.*)$ $1\.php [R=301,NC,L]
И в завершение, синтаксис 301 редиректа на php
(на случай если возникнут трудности с .htaccess):
header("HTTP/1.1 301 Moved Permanently"); header("Location: http://site.com"); die("Просходит переадресация...");
Не забудьте добавить в начало файла .htaccess строки:
RewriteEngine On RewriteBase /
Которые включают правила переадресации и определяют полный путь от корня сайта.