"Программист — это профессиональный конвертер галлюцинаций заказчика в жесткую формальную систему"
Jan 172013
 

В этой статье я постараюсь рассказать про 301 редирект. Что это? Как это использовать? Показывать буду на примере 3-х своих сайтов:

http://nord-tramper.expeditionlife.ru – сайт-источник

http://lifelongjourney.ru – сайт, куда идет редирект

http://nord-tramper.ru – сайт, куда идет редирект (часть постов уезжает из старого блога сюда)

Итак, приступим!

Что такое 301 редирект?

Каждый раз при обращении к страницам любого сайта браузер получает в ответ код

Это указание браузеру (или поисковому боту), что запрашиваемая страница перемещена на постоянной основе по новому адресу. Это может быть адрес внутри Вашего сайта и вообще какой-то внешний ресурс (например Ваш новый сайт)

Зачем использовать 301 редирект?

Это позволяет не потерять поисковый траффик при перемещении страниц на новый адрес

Пример синтаксиса 301 редиректа

301 редирект прописывается в файле .htaccess. Для его работы должно быть включено преобразование адресов

RewiteEngine On

скорее всего оно уже давно включено, но проверить стоит.

Собственно сам синтаксис

Redirect 301 OLD_ADDRESS NEW_ADDRESS

или

RewriteRule ^(.*)OLD_ADDRESS$ NEW_ADDRESS [R=301,L]

Мне будет достаточно прописать редирект в первом варианте, например

Redirect 301 /archives/140 http://lifelongjourney.ru/2010/04/23/krym-den-1/

Один важный момент – на старом блоге не было ЧПУ, а переадресовать адрес вида /?p=140 у меня не получилось. Поэтому были добавлены ЧПУ вида /archives/%post_id%. Ну и вышло два редиректа подряд, оба 301.

Классические задачи с использованием 301 редиректа

Слияния имен сайта с www и без него:
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^yoursite\.com
RewriteRule ^(.*)$ http://www.yoursite.com/$1 [R=permanent,L]

или альтернативный синтаксис:

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

Обозначение [R=301,L] означает: перенаправить клиента и отправить ему код статуса 301 (R=301) и сделать это правило последним (L).

Редирект старого домена на новый:

Options +FollowSymLinks
RewriteEngine on
RewriteRule (.*) http://www.newdomain.com/$1 [R=301,L]

Важное замечание – директива Options +FollowSymlink может вызвать ошибку сервера 500, если ваш хостер не разрешает вам менять настройки apcahe2.

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

RedirectMatch вместо обычного Redirect. Эта директива позволяет использовать регулярные выражения. Вот ее синтаксис:

RedirectMatch SEARCH REPLACE [R=301,L]

вот пример с одного из моих сайтов:

RedirectMatch ^\/(20.*)$ http://lifelongjourney.ru/$1 [R=301,L]

Тут я переадресую все ссылки начинающиеся с /20 (ссылки постов имеют вид /YYYY/MM/DD/POST_NAME) на lifelongjourney.ru. Круглые скобки позволяют запомнить часть регулярного выражения и использовать ее для подстановки ($1) в адресе замены.

Поделиться в соц.сетях

  10 Responses to “Как установить 301 редирект и что это такое”

  1. не получается сделать переадресацию со страницы вида: index.php?page=XXX на страницу XXX.html.
    вроде правильно так: RewriteRule ^index.php?page=(.*)$ /$1.html [L,R=301], а на деле не работает. не подскажете чего? срочно позарез надо! всю ночь просидел!

  2. Включен.. .htaccess лежит в корне сайта (в папке public_html)..
    вот его полное содержание:

    Options +FollowSymLinks
    RewriteEngine On
    RewriteRule ^/index\.php?page=(.*)$ /$1.html [L,R=301]

    ежели так, как Вы посоветовали попробовать:
    Options +FollowSymLinks
    RewriteEngine On
    RedirectMatch ^index\.php\?page=(.*)$ SITE/$1.html [R=301,L]

    то Apache/2.2.24 Server at SITE Port 80 выдает 500 ошибку.

    …от недостатка знаний теряюсь в догадках

    • RedirectMatch 301 ^/(20.*)$ http://lifelongjourney.ru/$1 – так правильно.

      Извиняейте, синтаксиси сменился, у меня тоже недавно сайт начал падать, с которого этот редирект провешен.

      Т.е. у вас будет:
      RedirectMatch 301 ^index\.php\?page=(.*)$ YOUR_SITE_URL/$1.html

  3. спалилса! если можно, имя сайта уберите, пож!!!

  4. Подскажите уважаемый.У меня на сайте индексируются мусорные страницы, те. адрес к примеру такой http://economdoma.ru/karkasnye_doma/?viwimg=chertezh_1_etazh и открывается страница дубль которая соответствует урлу http://economdoma.ru/karkasnye_doma/ Т.е надо сделать наверное типа маски такого плана редирект /karkasnye_doma/?* т.е. чтобы все что после директории этой начинающиеся со знака вопроса редиректилось на нормальную директорию /karkasnye_doma/
    Не подскажите можно ли так сделать?

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)