htaccess Redirect и Rewrite

Делаем Redirect и Rewrite в строке со знаком вопроса

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

Как делается обычный редирект в htaccess?

Рассмотри пару простых примеров - более сложные случаи представлены в Интернете.

Пример  1

Redirect 301 / http://www.my_site.com/new.html

В этом примере Redirect 301 - это инструкция, говорящая что страница перемещена
/ - означает, что все с верхнего уровня сайта, включая все подкаталоги, будет переадресовано
http://www.my_site.com/new.html - новая страница или сайт (обязательно поставьте "/", если переадресация идет на сайт).

Пример 2

Redirect 301 /old_directory/old_page.html http://www.my_site.com/new.html

В этом примере показано, как переадресовать только одну страницу, сохранив при этом показатель PR (PageRank) старой страницы.

Что делать с редиректами в htaccess, если в строке знак вопроса?

Рассмотрим такой случай. Есть сайт, у которого страницы имеют вид my_site.ru/page.php?id=3. Это не самая красивая разновидность ссылок. Очень часто для больше красоты делают RewriteRule в htaccess, чтобы придать ссылкам красивый внешний вид. Для этого пользуются конструкцией

RewriteRule ^page_number_3\.html page.php?_id=3 [L]


Однако потом можно столкнуться с проблемой - если вы сделали такое ЧПУ (Человеко Понятные Урлы от англ. Friendly URL) не сразу, а через какое-то время после создания сайта, может получиться, что уже имеются ссылки на страницу с адресом my_site.ru/old_page.php?id=3 а для поисковиков эта страница будет копией страницы my_site.ru/page_number_3.html . В таком случае нужно сделать редирект с my_site.ru/old_page.php?id=3 на my_site.ru/page_number_3.html . Главное, чтобы не получился цикл

Вот как это делается для одной страницы:

 RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteCond %{QUERY_STRING} id=3
RewriteRule ^old_page\.php$ http://%{HTTP_HOST}/page_number_3.html? [R=301,L]

Не получается в htaccess?

Если не получается сделать редирект с помощью htaccess, его можно сделать либо с помощью html, либо с помощью php:

header($_SERVER['SERVER_PROTOCOL'].' 301 Moved Permanently');
header('Location: http://new_site.ru/new_page.html');

Есть ещё один вариант - метатег canonical, сообщающий поисковику о том, где оригинал страницы, однако редиректа для юзера в этот момент не происходит!

 

Случайная новость

12 сентября Вышел Apple iPhone 5

Вышел в свет долгожданный для многих iPhone 5. Что же в нём нового?

Подробнее ...

Материал о ПК

Прохождение игры Angry Birds Star Wars

Если вы не знаете, как пройти новую игру Angry Birds Star Wars (звездные войны) - специально для вас прохождение игры Angry Birds Star Wars!

Подробнее ...


Нажимай!

Кто на сайте

Сейчас 3 гостей онлайн

Голосуй

Используете ли вы плёнку на сенсорных экранах?
 

Valid XHTML 1.0 Transitional Читать в Яндекс.Ленте