В этой статье я постараюсь рассказать про 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) в адресе замены.
не получается сделать переадресацию со страницы вида: index.php?page=XXX на страницу XXX.html.
вроде правильно так: RewriteRule ^index.php?page=(.*)$ /$1.html [L,R=301], а на деле не работает. не подскажете чего? срочно позарез надо! всю ночь просидел!
А mod_rewrite включен? Синтаксис выглядит правильным.
Попробуйте такой вариант
RedirectMatch ^index\.php\?page=(.*)$ http://YOURSITE/$1.html [R=301,L]
Синтаксис немного другой теперь
RedirectMatch 301 ^/(20.*)$ YOUR_SITE/$1
Включен.. .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
спалилса! если можно, имя сайта уберите, пож!!!
Подскажите уважаемый.У меня на сайте индексируются мусорные страницы, те. адрес к примеру такой http://economdoma.ru/karkasnye_doma/?viwimg=chertezh_1_etazh и открывается страница дубль которая соответствует урлу http://economdoma.ru/karkasnye_doma/ Т.е надо сделать наверное типа маски такого плана редирект /karkasnye_doma/?* т.е. чтобы все что после директории этой начинающиеся со знака вопроса редиректилось на нормальную директорию /karkasnye_doma/
Не подскажите можно ли так сделать?
Ну да – /(karkasnye_doma)/.*? и редирект на $1