Примеры использования mod_rewrite
Модуль mod_rewrite , имеющийся в составе Apache — это мощнейшее, интеллектуальное средство преобразования URL адресов. С ним возможны почти все типы преобразований, которые могут выполнятся или нет в зависимости от разных условий и факторов.
Данный модуль представляет собой основанный на правилах механизм (синтаксический анализатор с применением регулярных выражений), выполняющий URL преобразования на лету. Модуль поддерживает неограниченное количество правил и связанных с каждым правилом условий, реализуя действительно гибкий и мощный механизм управления URL. URL преобразования могут использовать разные источники данных, например переменные сервера, переменные окружения, HTTP заголовки, время и даже запросы к внешним базам данных в разных форматах, — для получения URL нужного вам вида.
Важно! Для того чтобы mod_rewrite работал, необходимо в заголовок файла .htaccess добавить:
<Files ~ (\.php)> Options +SymLinksIfOwnerMatch </Files>
Обратите внимание, что правила применяются для каталога, в котором расположен файл .htaccess и зависят от наличия файла .htaccess в корневой папке.
Ниже приведены наиболее распространенные примеры применения mod_rewrite:
- Жесткий запрет посещений веб-сайта для робота поисковой системы Google (при вызове возвращает ошибку 403):
RewriteEngine on RewriteCond %{USER_AGENT} Googlebot RewriteRule .* - [F]
Другой вариант возвращает вместо ошибки 403 (FORBIDDEN) ошибку 404 (NOT_FOUND)
RewriteCond %{USER_AGENT} Googlebot RewriteRule .* - [R=404]
- Закрытие доступа к веб-сайту в рабочее время:
RewriteEngine on RewriteCond %{TIME_HOUR}%{TIME_MIN} > 900 RewriteCond %{TIME_HOUR}%{TIME_MIN} < 1800 RewriteRule .* - [ F ]
- Запрет на скачивание ресурсов с веб-сайта. Например, если на вашем сайте есть очень ценные картинки или архивы и вы не хотите чтобы кто-то размещал их на своих страницах, создавая таким образом бесполезный трафик для вашего сайта, вы можете запретить скачивание ресурсов, проверяя поле заголовка 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 ]
- Автоматическое исправление ошибки при наборе адреса веб-страницы пользователем (связи с неоднозначностью записи расширения HTML файлов ( .htm или .html )):
RewriteEngine on RewriteBase / RewriteRule ^(.*)\.htm$ $1.html [R=permanent]
- Если необходимо запрос любой страницы сайта отправлять на одну (при вызове возвращает ошибку 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]
- Перенаправление несуществующих URL на другой веб-сервер:
RewriteEngine on RewriteBase / RewriteCond /your/docroot/%{REQUEST_FILENAME} !-U RewriteRule ^(.+) http://webserverB.dom/$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 для вас в рамках дополнительной услуги .