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

Как настроить 301 редирект
  • 22.03.2015
  • 6906
  • 3.8
  • 0
  • Константин Винниченко

Зачем нужен 301 редирект в SEO

301 Permanent – это часть протокола HTTP, код ответа 301 сообщает, что ресурс навсегда перемещен на новый URL. Так человек переходя по старой ссылке перебрасывается на новый адрес, а поисковая система индексируя старый URL заменяет ее на новый URL с сохранением позиций этой страницы в поисковой выдаче.

В каких случаях применяется:

  • при изменении URL адреса, например для создания ЧПУ
  • при полной смене домена, например на короткий запоминающийся домен
  • при смене CMS, например старая ограничена в функциональных возможностях
  • при устранении дублей страниц, например URL заканчивается на слеш ("/") и без него
  • для склейки имени сайта с WWW и без WWW
  • для сохранения позиций в поисковых системах

Какова бы не была причина, основной аспект заключается в том, что раньше на страницу можно было попасть по старому адресу, теперь адрес этой страницы изменился и человека, а так же поисковую систему надо автоматически направить по новому адресу URL.

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

301 редирект через .htaccess

Не всегда может работать, так как диктуется возможностями сервера или хостинга. Если на нем используется Apache - тогда проще всего реализовать с помощью файла .htaccess в корне папки сайта. Для работы так же нужно наличие включенных модулей mod_alias и/или mod_rewrite в php.ini.

Иногда изменяя логику работы редиректа через файл .htaccess можно внести изменения, а они либо не работают, а должны работать, либо работает еще старая логика – в этом случае, попробуйте проверить редирект в другом браузере, возможно ответ закешировался на некоторое время.

Винниченко Константин, замечание из практики

На другую страницу

Простой пример 301 редиректа с перенаправлением одной страницы, для перенаправления нескольких страниц достаточно добавить несколько таких строчек

Redirect 301 /old-page.html http://site.ru/new-page.html

На другой раздел или каталог

Если изменили название каталога или раздела в URL

RewriteRule old-catalog /(.*) / old-catalog /$1 [R=301,L]

Если каталог или раздел находится в середине URL тогда этот пример

 RewriteRule ^(.*)/old-catalog/(.*)$ $1/new-catalog/$2 [R=301,L]

На другой домен

Если весь сайт переехал на другое доменное имя с сохранением URL

Options +FollowSymLinks
RewriteEngine On
RewriteRule ^(.*)$ http://new-site.ru/$1 [R=301,L]

Домен с WWW на без WWW

Хотите сократить адрес сайта с http://www.site.ru на http://site.ru

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

Домен без WWW на с WWW

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

Удалить слеш в конце

Очень частая ошибка и для поисковых систем это считаются разные страницы

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} ^(.+)/$
RewriteRule ^(.+)/$ /$1 [R=301,L]

Добавить слеш в конце

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*[^/])$ $1/ [L,R=301]

С расширения PHP на HTML

В случаях смены CMS или сделать привычный людям URL

RedirectMatch 301 /(.*)\.php$ /$1.html

Дубли главной страницы

Для любого адреса домашней страницы, например, http://site.ru/default.htm или http://site.ru/index.html, будет перенаправлен на главную страницу http://site.ru

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /([^/]+/)*(default|index|main)\.(html|php|htm)\ HTTP/ [NC]
RewriteRule ^(([^/]+/)*)(default|main|index)\.(html|php|htm)$ http://site.ru/$1 [L,R=301]

Все адреса с index.php на без

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.php\ HTTP/
RewriteRule ^(.*)index\.php$ http://site.ru/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^.*$ $0.php [L,QSA]
RewriteCond %{THE_REQUEST} ([^\s]*)index\.php(\?[^\s]*)?
RewriteRule (.*) %1 [R=301,L]

C HTTP на HTTPS

Установили SSL-сертификат, хотите сделать чтобы сайт был доступен только по HTTPS протоколу

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

С HTTPS на HTTP

RewriteEngine On
RewriteCond %{HTTPS} on
RewriteRule ^.*$ http://%{SERVER_NAME}%{REQUEST_URI}

Редирект средствами CMS

Редирект 301 Битрикс

<?
LocalRedirect(
"/", // перенаправляем на главную страницу сайта
false, // пропустить проверку модуля безопасности на фишинг
"301 Moved permanently" // со статусом 301
);
?>

Полезно сделать

Рейтинг:
(3.83 из 5 - 6 голосов)
Сохранить страницу себе: