четверг, 18 июля 2013 г.

htaccess 4 RewriteRule

RewriteRule определяет правила для механизма преобразований.

Первому RewriteRule передается путь от того места, где находится .htaccess, до запрошенного файла. Эта строка никогда не начинается со "/". Последующим RewriteRule передается результат предыдущих преобразований.

В RewriteRule передается не ссылка, а путь до запрошенного файла.

Поэтому в mod_rewrite передается абсолютный путь до файла, а mod_rewrite отрезает от абсолютного пути часть до файла .htaccess.

RewriteRule просто преобразовывает строку в соответствии с регулярными выражениями, и все. RewriteRule работает со строкой, а не со ссылкой или путем до файла.

    Запрос: http://example.com/templates/silver/images/logo.gif
    DocumentRoot: /var/www/example.com
    Путь до файла: /var/www/example.com/templates/silver/images/logo.gif
    .htaccess находится в: /var/www/example.com/templates/.htaccess
    В первый RewriteRule будет передано: silver/images/logo.gif
    Обратите внимание: «templates/» тоже отрезалось.


Путь до .htaccess отрезается вместе со слешем. Из этого есть следствие: строка, которая изначально передается на обработку RewriteRule никогда не начинается со "/".

RewriteRule Шаблон Подстановка

Шаблон это perl совместимое регулярное выражение которое применяется к текущему URL.
  1. Взяли строку.   
  2. Сравнили с регулярным выражением в первом аргументе.
  3. Если есть совпадение — заменили всю строку на значение второго аргумента.
  4. Передали строку следующему RewriteRule.
RewriteRule красивый url настоящий url [флаги]

Флаги указываются в конце каждого правила в квадратных скобках через запятую.
Например:

RewriteRule ^([\w\d\-]+).html$ show.php?id=$1 [L,NC,QSA] 


RewriteCond %{QUERY_STRING} .chi-siamo\.html$
RewriteRule ^index\.php$ ?lang=it [L,R=301]

Этот URL не обязательно совпадает с первоначально запрошенным URL, потому что любое количество правил возможно уже были применены к нему и соответственно преобразовали его.
 Текст:
.(точка)     Любой одиночный символ
[chars]   Класс симвлолв: Один из символов
[^chars]  Класс симвлолв: Ни один из символов
text1|text2 Альтернатива: text1 или text2 


Кванторы (символы для обозначения количественных отношений):
?     0 или 1 из предшествующего текста
*     0 или N из предшествующего текста (N > 0)
+     1 или N из предшествующего текста (N > 1) 


Группировка:

(text)  Группировка текста
(либо установка границ альтернативы или для создания обратных связей где N группа, которая 
может быть использована в RHS директивы RewriteRule с $N)


Маркеры:
^     Маркер начала строки
$     Маркер конца строки


Экранирование:  \char экранирование конкретного символа
(к примеру для указания символов ".[]()" и т.д.)

Cимвол отрицания (NOT) - ('!') 

Если используются шаблоны с отрицанием, вы не можете использовать $N в строках подстановок! Подстановка в правиле преобразования это строка будет подставляться (или будет заменять) вместо оригинального URL, для которого есть совпадение Шаблону. Кроме простого текста вы можете использовать:

    1.обратные связи $N на шаблоны в RewriteRule
    2.обратные связи %N на последний соответствующий шаблон в RewriteCond
    3.переменные сервера в качестве проверяемых строк в условиях правил (%{VARNAME})
    4.вызовы запросов к массиву (${mapname:key|default})

Флаги

 

[R]
Redirect - останавливает процесс преобразования и возвращает результат браузеру клиента как редирект на данную страницу (код 302 - MOVED TEMPORARY), также можно указать код редиректа самостоятельно, например R=301 (код 301 - MOVED PERMANENTLY).
[F]
Forbidden - возвращает ошибку 403.
[G]
Gone - возвращает ошибку 410.
[P]
Proxy - дает команду Apache выполнть подзапрос к указанной странице с использованием программного модуля mod_proxy, при этом пользователь ничего не узнает об этом подзапросе. Если модуль mod_proxy отсутствует, то произойдет ошибка.
[L]
Last - останавливает процесс преобразования, и текущая ссылка считается окончательной.
[N]
Next - запускает процесс преобразования с первого по порядку правила.
[C]
Chain - объединяет несколько правил в цепочку. Если первое правило цепочки не срабатывает, то вся цепочка игнорируется.
[NS]
NoSubreq - разрешает срабатывание правила только для настоящих запросов, игнорируя подзапросы.
[NC]
NoCase - отключает проверку регистра символов.
[QSA]
Qsappend - добавляет исходные параметры запроса (query string) к замене. Если замена не включает в себя новые параметры запроса, то исходные параметры запроса добавляются автоматически. Если же включает, то без флага QSA исходные параметры запроса будут утеряны.
[PT]
PassThrough - останавливает процесс преобразования и передает полученную новую ссылку дальше по цепочке.
[S]
Skip - пропускает следующее правило, если данное правило сработало. Можно указать количество правил, например: S=2
[E]
Env - устанавливает переменную окружения, например: E=переменная:значение.

Комментариев нет:

Отправить комментарий