В первой части даны основные понятия гибкой настройки сервера через файл .htaccess, перечислены наиболее часто встречающиеся правила. Сегодня расскажу про mod_rewrite, модуль Apache для URL-преобразований, а точнее для динамического преобразования запрашиваемых URL`ов. Для понимания mod_rewrite необходимо в свою очередь знать что такое переменные среды CGI (ссылка ниже) и иметь представление о регулярных выражениях (ссылка ниже), если эти понятия ни о чем вам не говорят, то думать о mod_rewrite еще рано.

Для начала убеждаемся, что mod_rewrite подключен. Проверяем наличие файла mod_rewrite.so, смотрим присутствует ли в httpd.conf строка: LoadModule rewrite_module modules/mod_rewrite.so или спрашиваем у провайдера, подключен ли модуль.

***

При осуществлении преобразований нам понадобятся 5 директив:
RewriteEngine – запуск модуля (on), приостановка преобразований (off)
RewriteOptions – дополнительные опции
RewriteBase – указывает базовый путь для преобразований.
RewriteCond – указывает условия при наличии которых применяется следующая директива RewriteRule.
RewriteRule – набор правил, выделяющие URL, которые будут преобразовыватся.

***

Легче рассмотреть принципы написания URL-преобразований на пошаговом примере. Пример .htaccess для защиты от hotlink (т.е. использования прямых ссылок с других сайтов на файлы вашего сайта site.com):

# установлен ли модуль
<IfModule mod_rewrite.c>

# запускаем модуль
RewriteEngine on

# защищаемся от бесконечного цикла (на случай
# если мы допустили в правилах ошибки)
RewriteOptions MaxRedirects=50

# "/" - обозначает корневой URL, обычно
# соответствует http://вашсайт.ру/
RewriteBase /

# условие читается: "проверить с какого URL
# пришел запрос, если не с site.com [регистр
# не учитывать], то смотрим RewriteRule"
RewriteCond %{HTTP_REFERER} !^http://(www\.)?site\.com/ [NC]

# правило читается: "если запрашиваются файлы
# заканчивающиеся на .jpg или .jpeg или .gif или .png",
# то вместо этих файлов передаем следущий
# урл 'http://www.site.com/img/nohotlink.png' и
# флаг [L] указывает прекратить обработку дальнейших команд
RewriteRule \.(jpe?g|gif|png)$ http://www.site.com/img/nohotlink.png [L]

# закрываем блок
</IfModule>

***

Структура условия:
1) RewriteCond – директива
2) %{HTTP_REFERER} – сравниваемая строка (HTTP_REFERER – переменная среды CGI)
3) !^http://(www\.)?site\.com/ – условие (регулярное выражение)
4) [NC] – флаг ([NC] – не учитывать регистр, [OR] – “или” еще одно условие)

***

Еще пример:

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteOptions MaxRedirects=50
RewriteBase /

# 1) Переписываем ссылки вида file.php?var1=hi в /hi/
# 2) И сылки вида file.php?var1=hi&var2=hello&var3=salut
# в /hi/hello/salut/
RewriteRule ^([^/\.]+)/?$ /file.php?var1=$1 [L]
RewriteRule ^([^/\.]+)/([^/\.]+)/([^/\.]+)/?$ file.php?var1=$1&var2=$2&var3=$3 [L]

# готово!
</IfModule>

***

Полезные ссылки:
Переменные среды CGI
Регулярные выражения
URL Rewriting Guide

Комментарии

You need to enable javascript in order to use Simple CAPTCHA.