Для перенаправления (редиректа) служат директив ы 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.