Веб-студия LANCIO
Меню

301 редирект в .htaccess

Как настроить и когда использовать

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

Автор Рубрика Блог Дата Июль 25, 2016


В этой статье мы поговорим про 301 редирект, а также обсудим моменты в которых стоит его применять. В материале я обязательно приведу практические примеры, так что не торопитесь закрывать статью.
Для тех кто не знает, 301 редирект представляет собой переадресацию пользователя на другой адрес страницы или домена, который несет в себе код ответа сервера, означающий, что страница или ресурс перенесены навсегда (или временно – 302 редирект) и теперь доступны по другому адресу.
При редиректе передаётся тИЦ и PR страницы, поэтому не бойтесь потерять вес при использовании.

Имеет место множество 3хх редиректов, но чаще всего используются коды 301 и 302:

  • 301 – постоянный редирект, данный код уведомляет о перемещении ресурса или страницы на новый адрес на постоянной основе с удалением прошлого домена. Данный редирект используется для окончательного переезда на новый ресурс, новую CMS, а также для склейки страниц.
    Результат: в поисковой выдаче начинает отображаться новый URL.
  • 302 – временный редирект, данный код говорит о временном переезде сайта или его страницы.
    Результат: в поисковой выдаче сохраняется старый URL страницы, но через 6 месяцев использования поисковая система начинает считать его за постоянный.

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

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

Примеры использования редиректа (простые варианты)

Редирект с сайта на сайт

Redirect / www.example.com
www.example.com — сайт, на который мы перенаправляем запрос пользователя.

Редирект со страниц текущего сайта на другой сайт (или редирект на главную страницу)

Redirect /lancio-studio lancio-studio.ru/
Redirect /lancio-studio/blog lancio-studio.ru/blog
Redirect 301 /kernel lancio-studio.ru/

Разберем детально код выше:
1 строка — при обращении к странице www.example.com/lancio-studio будет открываться сайт lancio-studio.ru/
2 строка — при обращении к http://www.example.com/lancio-studio/blog будет открываться lancio-studio.ru/blog
3 строка — веб-сервер будет отдавать код 301 о постоянном переезде на новый URL

Примеры использования редиректа (сложные варианты)

Для сложных редиректов используется модуль mod_rewrite, который применяется для преобразования URL-адресов, использующий регулярные выражения. Для редиректа используются три важные директивы: RewriteCond, RewriteRule и RewriteEngine.

Директива RewriteEngine включает или выключает работу механизма преобразования:

  • RewriteEngine on | off (положение on-off включает и выключает работу модуля)
  • RewriteCond — определяет условие какого-либо правила при котором происходит преобразование. Сразу после директивы чаще всего идут переменные %{HTTP_HOST} и %{REQUEST_URI}, которые означают адрес сервера (например, example.ru) и ресурс, запрошенный в строке HTTP-запроса, соответственно.
  • RewriteRule — следует после одного или нескольких условий RewriteCond. Это правило преобразования URI, которое применяется только при условии выполнения RewriteCond.
    Синтаксис директивы RewriteRule выглядит следующим образом: RewriteRule Шаблон Подстановка [flag]

Разберем метасимволы, которые используются в коде:
^ — метка начала строки;
$ — метка конца строки;
\ — экранирующий слэш, позволяет считать следующий за ним метасимвол обычным символом;
. — точка, обозначает любой символ, но только один;
() — группировка;
! — отрицание;

Флаги определения дополнительных опций для данного правила, которые перечисляются в квадратных скобках через запятую:
NC — (nocase) отключает проверку регистра символов;
R — (redirect) останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (302, MOVED TEMPORARY). С данным флагом можно указать другой код результата, например R=301 возвратит редирект с кодом 301 (MOVED PERMANENTLY);
L — (last) останавливает процесс преобразования, и текущая ссылка считается окончательной.

Как сделать 301 редирект?

Давайте применим правила и сделаем редирект с помощью файла htaccess.

Редирект на другую страницу

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

Редирект с www на без www

RewriteEngine on
RewriteCond %{HTTP_HOST} !^site.ru$ [NC]
RewriteRule ^(.*)$ site.ru/$1 [R=301,L]

Редирект с без www на www

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

где site.ru — ваше доменное имя.

Редирект с index.php (html) на главную страницу

RewriteEngine on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html|htm)\ HTTP/
RewriteRule ^(.*)index\.(php|html|htm)$ $1 [R=301,L]

Редирект со слешем на без слеша

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} ![^\/]$
RewriteRule ^(.*)\/$ /$1 [R=301,L]

Редирект со страниц без слеша на слеш

RewriteCond %{REQUEST_URI} !\?
RewriteCond %{REQUEST_URI} !\&
RewriteCond %{REQUEST_URI} !\=
RewriteCond %{REQUEST_URI} !\.
RewriteCond %{REQUEST_URI} !\/$
RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]

Редирект всех страниц одного домена на главную другого домена

RewriteCond %{REQUEST_URI} (.*)
RewriteRule ^(.*)$ http://site.ru/ [L,R=301]

Редирект с http на https

RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]

Редирект с https на http

RewriteCond %{HTTPS} =on
RewriteRule ^(.*)$ http://%{HTTP_HOST}/$1 [R=301,L]

Как избавиться от дублей страниц

Если в адресе основной страницы присутствуют посторонние символы (например, &gh=3245 или ?ghd=899), то просто замените буквенную часть в следующем коде

RewriteCond %{REQUEST_URI} ^(.*)\&gh=
RewriteRule ^(.*)\&gh=(.*)$ $1 [R=301,L]

Объясню этот момент подробнее. С помощью 301 редиректа можно сделать так, чтобы по запросу site.ru/category/sub/zapis/ в строке адреса было site.ru/zapis/, то есть /category/sub вырезалась бы из строки, но после вырезания строки показывалось содержимое site.ru/category/sub/zapis/. Код будет следующего вида:

RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^category/sub/zapis/$ http://%{HTTP_HOST}/zapis/ [R=301,L]
RewriteRule ^zapis/$ /category/sub/zapis/ [L]

Важные нюансы при использовании редиректа

  • Соблюдайте иерархию редиректов – от частных к более общим (переадресация со страницы на страницу будет выше, чем переадресация с без www на www).
  • Следует избегать последовательных, двойных и тройных — редиректов, так как редирект перенаправляет пользователя только один раз.
  • Проверяйте HTTP заголовки и статусы ответа сервера, чтобы убедиться в правильности работы вашего редиректа.

Когда нужно использовать редирект?

  • При переезде на другой домен, а также при необходимости передать вес прошлого сайта на новый.
  • При желании склеить зеркала, если у вас несколько доменных имён и вы хотите перенаправить всех посетителей на основной сайт.
  • Если страница сменила свой адрес: структура вашего сайта была реорганизована и вы пытаетесь предотвратить возможный беспорядок.
  • При желании избавиться от дублей страниц или копии сайта.