Примеры использования mod_rewrite

Описание и примеры использования модуля mod_rewrite в файле .htaccess.

Модуль mod_rewrite , имеющийся в составе Apache — это мощнейшее, интеллектуальное средство преобразования URL адресов. С ним возможны почти все типы преобразований, которые могут выполнятся или нет в зависимости от разных условий и факторов.

Данный модуль представляет собой основанный на правилах механизм (синтаксический анализатор с применением регулярных выражений), выполняющий URL преобразования на лету. Модуль поддерживает неограниченное количество правил и связанных с каждым правилом условий, реализуя действительно гибкий и мощный механизм управления URL. URL преобразования могут использовать разные источники данных, например переменные сервера, переменные окружения, HTTP заголовки, время и даже запросы к внешним базам данных в разных форматах, — для получения URL нужного вам вида.

Важно! Для того чтобы mod_rewrite работал, необходимо в заголовок файла .htaccess добавить:

<Files ~ (\.php)>
Options +SymLinksIfOwnerMatch 
</Files>

Обратите внимание, что правила применяются для каталога, в котором расположен файл .htaccess и зависят от наличия файла .htaccess в корневой папке.

Ниже приведены наиболее распространенные примеры применения mod_rewrite:

  1. Жесткий запрет посещений веб-сайта для робота поисковой системы Google (при вызове возвращает ошибку 403):
RewriteEngine on

RewriteCond %{USER_AGENT} Googlebot
RewriteRule .* - [F]

Другой вариант возвращает вместо ошибки 403 (FORBIDDEN) ошибку 404 (NOT_FOUND)

RewriteCond %{USER_AGENT} Googlebot
RewriteRule .* - [R=404]
  1. Закрытие доступа к веб-сайту в рабочее время:
RewriteEngine on

RewriteCond %{TIME_HOUR}%{TIME_MIN} > 900
RewriteCond %{TIME_HOUR}%{TIME_MIN} < 1800
RewriteRule .* - [ F ]
  1. Запрет на скачивание ресурсов с веб-сайта. Например, если на вашем сайте есть очень ценные картинки или архивы и вы не хотите чтобы кто-то размещал их на своих страницах, создавая таким образом бесполезный трафик для вашего сайта, вы можете запретить скачивание ресурсов, проверяя поле заголовка HTTP_REFERER .

Для каталога:

RewriteEngine on

RewriteBase   /img/
RewriteCond %{HTTP_REFERER} !^$
RewriteRule .* - [ F ]

и для определенных типов файлов:

RewriteEngine on

RewriteBase   /img/
RewriteCond %{HTTP_REFERER} !^$
RewriteRule \.(jpe?g|gif|png|css|swf)$ - [ F ]
  1. Автоматическое исправление ошибки при наборе адреса веб-страницы пользователем (связи с неоднозначностью записи расширения HTML файлов ( .htm или .html )):
RewriteEngine on

RewriteBase   /
RewriteRule ^(.*)\.htm$  $1.html [R=permanent]
  1. Если необходимо запрос любой страницы сайта отправлять на одну (при вызове возвращает ошибку 403), но в то же время нужно оставить его открытым для поисковых машин. То есть для клиентов сайт закрыт, а для индексации - открыт:
RewriteEngine on

RewriteBase   /
RewriteCond %{HTTP_USER_AGENT} !^yandex.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !^googlebot.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !^gaisbot.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !^rambler.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !^aport.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !^metacrawler.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !^msnbot.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} !^crawler.* [NC,OR]
RewriteRule ^/$ - [L,R]
  1. Перенаправление несуществующих URL на другой веб-сервер:
RewriteEngine on

RewriteBase   /
RewriteCond /your/docroot/%{REQUEST_FILENAME} !-U
RewriteRule ^(.+) http://webserverB.dom/$1
  1. Перенаправление сайта с одного домена на другой после переноса домена (Например, с domain.com на domain2.com):
RewriteEngine on

RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [R=301,1]
RewriteRule ^(.*)$ http://www.domain2.com/$1

Подробная информация об использовании .htaccess дана в официальной документации Apache .

Также, если у вас возникли проблемы с использованием mod_rewrite, обратитесь в Службу технической поддержки хостинга, мы можем написать правила .htaccess для вас в рамках дополнительной услуги .

Вам также может помочь