htaccess редирект



Для перенаправления (редиректа) служат директив ы Redirect и RedirectMatch.

Они сообщают, что ресурс по запрошенному URL отсутствует, и указывают адрес, по которому следует перейти.

Директивы Redirect посылают браузеру соответствующий заголовок, и уже браузер осуществляет перенаправление.
Глобальное перенаправление на новый адрес
Redirect  /    http://www. site.ua/

Если в условиях поиска указать /, то перенаправление на новый адрес http://www.site.ua/ будет осуществляться при обращении к корню сайта:
Redirect    /about/index.php    http://www.site.ua/company/

Перенаправление при обращении к каталогу:
Redirect    /about    http://www.site.ua/company/

Рассмотрим, как будет работать перенаправление, если запросить страницу http://www.mysite.com.ua/about/page_1.php. При обращении в каталог about будет сделана попытка перенаправить запрос по адресу http://www.site.ua /company/page_1.php.

То есть имя запрашиваемой страницы присоединится к новому URL, хотя оно не было указано в условиях перенаправления. Если по новому адресу такой страницы нет, то будет выдана стандартная страница с 404-й ошибкой о недоступности страницы.

Директива Redirect является регистрозависимой. То есть если в запросе написать имя каталога About с большой буквы (http://www.mysite.com.ua/About/), то перенаправление не сработает, т. к. в условиях поиска каталог about напи¬сан с маленькой буквы.

Директива RedirectMatch расширяет функциональность директивы Redirect. С ее помощью можно применять регулярные выражения при указании URL, используемых при перенаправлении.

У директив Redirect и RedirectMatch имеется дополнительный параметр, с помощью которого можно управлять состоянием перенаправления. Данный параметр может принимать следующие значения:
permanent — ресурс перемещен навсегда; код состояния 301;
temp - ресурс перемещен временно; код состояния 302;
seeother — ресурс был заменен другим ресурсом; код состояния 303;
gone— ресурс удален навсегда; код состояния 410.

Параметр URL директивы Redirect должен быть опущен.
В зависимости от передаваемого кода состояния, браузеры могут предпри¬нять различные действия, например, при коде состояния 303 интеллектуаль¬ные браузеры могут заменить адреса ссылок в закладках.

Ресурс перемещен навсегда:
RedirectMatch permanent    /.*    http://www.mysite.ua/

mod rewrite
Более широкие возможности по преобразованию URL обеспечивают директивы модуля mod_rewrite. Использование директив модуля mod_rewrite увеличивает нагрузку на сервер, поэтому без крайней необходимости не следует их применять.
Чтобы включить механизм преобразования адресов, установите директиву RewriteEngine в значение on:
RewriteEngine On

Установка этой директивы в значение off отключит механизм преобразова¬ния. Таким образом, можно быстро включать и отключать правила преобра¬зования, описанные в файле .htaccess.

Директива RewriteRule определяет правила преобразования. Она имеет сле¬дующий синтаксис: RewriteRuie шаблон_поиска строка_для_замены [флаги]
В шаблоне поиска записывается регулярное выражение, применяемое к за¬прашиваемому URL. В строке для замены могут быть использованы: текст, ссылки на подстроки из регулярного выражения шаблона поиска, значения серверных переменных.

Некоторые серверные переменные, которые могут быть исполь¬зованы для преобразования адресов:
SERVERNAME — имя Web-сервера, например: www.site.ua;
SERVERPORT — номер порта Web-сервера;
DOCUMENTROOT— каталог документов верхнего уровня для Web-сайта, например: /usr/host/site/html;
HTTPFORWARDED — переадресованная ссылка;
HTTPHOST — имя компьютера Web-сервера;
HTTPREFERER— адрес страницы, с которой был осуществлен переход на текущую страницу;
HTTPUSERAGENT— информация о Web-клиенте, который запросил текущую страницу;
REMOTE_ADDR — IP-адрес посетителя;
REMOTEHOST — имя компьютера посетителя;
REQUESTMETHOD — метод запроса, который был использован при обраще¬нии к текущей странице;
SCRIPTFILENAME — физический путь к запрошенной странице, например: /usr/host/site/html/page.php;
PATHINFO — путь к запрошенной странице от DOCUMENT_ROOT;
QUERYSTRING — параметры запроса к странице, например: id=3&parent=4;
AUTH_TYPE — тип используемой аутентификации;
REQUESTURI — запрошенный URL. Содержит строку запроса после имени сервера, например: /company/test.php?id=3&parent=4;
REQUEST_FILENAME ТО Же Самое, ЧТО И REQUESTURI;
TIME_YEAR — текущий год;
TIME_MON — текущий месяц;
TIME_DAY — текущий день;
TIME_HOUR — текущий час;
TIME_MIN — текущая минута;
TIME_SEC — текущая секунда;
TIME_WDAY — текущий день недели;
TIME — текущее время.

Для того чтобы использовать серверные переменные в директивах модуля mod_rewrite, их следует писать в формате: %{имя_переменной}. Например:
RewriteCond %{HTTP_USER_AGENT}   Opera

Скрытая подмена страницы oldpage.html ; на страницу newpage.html
RewriteEngine on
RewriteBase /
RewriteRule    ^oldpage.html$    newpage.html

Здесь, при запросе страницы oldpage.html, URL преобразовывается в запрос к странице newpage.html. При этом подмена URL происходит незаметно для посетителя. В адресной строке продолжает отображаться имя страницы oldpage.html.

Если необходимо использовать внешнюю переадресацию, чтобы посетителю был отображен реальный адрес страницы, то в директиве RewriteRule нужно
указать флаг
.

Переадресация запроса страницы oldpage.html на страницу newpage.html с флагом [R]:
[BASH]RewriteEngine    On
RewriteBase    /
RewriteRule     ^oldpage.html$    newpage.html   [R]

Директива Rewritecond позволяет задавать условия при преобразовании адре¬сов. Синтаксис директивы RewriteCond: Rewritecond контрольиая_строка шаблон_поиска [флаги]
Если шаблон поиска найден в контрольной строке, т. е. условие выполнено, то выполняются директивы, указанные сразу за директивой RewriteCond, в противном случае управление переходит к следующему блоку директив. Пример изменения адресов в зависимости от типа браузера:
RewriteEngine    On
RewriteBase    /
RewriteCond    %{HTTP_USER_AGENT}     Opera
RewriteCond    % {REQUEST_FILENAME}     server. ru/$ | server. ru/index. php
RewriteRule     ^(.*)   index_opera.php?% {QUERY_STRING}   [L]
RewriteCond    %{HTTP_USER_AGENT}    Netscape
RewriteCond    %{REQUEST_FILENAME}     server . ru/$ | server . ru/index.php
RewriteRule    ^(.*)   index_netscape.php?%{QUERY_STRING}   [L]

Первое условие проверяет наличие в заголовке user-Agent подстроки opera. Если подстрока opera найдена, то проверяется следующее условие: направлен запрос к странице index.php, либо к корню сайта без указания имени файла. В обоих случаях следует подставить индексный файл, адаптированный под браузер Opera - index_opera.php. Флаг
 (Last) говорит о том, что дальнейшее выполнение директив следует прекратить. Если же первое условие:
[BASH]RewriteCond    %{HTTP_USER_AGENT}     Opera

не выполняется, то управление переходит на следующий блок, начинающийся
RewriteCond    %{HTTP_USER_AGENT}     Netscape

где проверяется принадлежность браузера к семейству Netscape, и условие истинно, то выполняется переадресация на страницу netscape.php, адаптированную под браузер Netscape. Если же условие проверки принадлежности браузера к Netscape также не выполнено, то преобразование адресов не происходит.

С помощью директив модуля modrewrite легко подвергать URL модификации в зависимости от времени суток, месяца, года и т. п.
RewriteEngine    On
RewriteBase    /
RewriteCond    %{TIME_HOUR}%{TIME_MIN}      >0700
RewriteCond    %{TIME_HOUR}%{TIME_MIN}      <1900
RewriteRule    ^page.php$    page_day.php?%{QUERY_STRING}   [L]
RewriteRule    ^page.php$    page_night.php?%{QUERY_STRING}   [L]

С помощью серверных переменных TIMEHOUR и TIME_MIN проверяется теку¬щее время. Если оно лежит в диапазоне от 7:00 до 19:00, т. е. выполняются оба условия RewriteCond, то запрошенный адрес преобразуется в запрос к странице page_day.php. Ключ
 прекращает дальнейшую обработку дирек¬тив. Если хотя бы одно условие не выполнено, то осуществляется запрос к странице pagenight.php.

Для запрета посещений сайта нежелательными роботами также можно воспользоваться модулем modrewrite. Управление посещениями сайта роботами возложено на файл robots.txt, но далеко не все роботы следуют указаниям этого файла. В таком случае для блокирования посещений сайта некорректно работающими роботами можно применить директивы модуля modrewrite.

Файл robots.txt — это текстовый файл, который используется для управления посещения сайта роботами поисковых систем. С его помощью можно запретить роботам посещать определенные разделы и страницы сайта. Директивы файла robots.txt имеют рекомендательный характер и могут игнорироваться некорректно работающими роботами, поэтому для достижения гарантированного запрета следует использовать директивы Apache.

В терминах протокола HTTP робот поисковой системы относится к интеллектуальному аген¬ту - это автономная программа, осуществляющая обход Web-pecypca для сбора  информации, расположенной на сайте. Полученная роботом информация используется для построения каталога поисковой системы.
[BASH]RewriteEngine    On
RewriteBase    /
RewriteCond    %{HTTP_USER_AGENT}    -robot
RewriteCond    %{REMOTE_ADDR}    ^195.48.56.12
RewriteRule    ^(.*)    for_bad_robots.php

Здесь в двух условиях RewriteCond проверяется имя робота, переданное в заголовке user-Agent, а затем IP-адрес, с которого робот пришел на сайт. Если оба условия выполняются, то осуществляется запрос к странице for_bad_robots.php.
Добавлено: 12 Сентября 2013 04:33:45 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...