RewriteRule определяет правила для механизма преобразований.
Первому RewriteRule передается путь от того места, где находится .htaccess, до запрошенного файла. Эта строка никогда не начинается со "/". Последующим RewriteRule передается результат предыдущих преобразований.
В RewriteRule передается не ссылка, а путь до запрошенного файла.
Поэтому в mod_rewrite передается абсолютный путь до файла, а mod_rewrite отрезает от абсолютного пути часть до файла .htaccess.
RewriteRule просто преобразовывает строку в соответствии с регулярными выражениями, и все. RewriteRule работает со строкой, а не со ссылкой или путем до файла.
Путь до .htaccess отрезается вместе со слешем. Из этого есть следствие: строка, которая изначально передается на обработку RewriteRule никогда не начинается со "/".
RewriteRule Шаблон Подстановка
Шаблон это perl совместимое регулярное выражение которое применяется к текущему URL.
Флаги указываются в конце каждого правила в квадратных скобках через запятую.
Например:
RewriteCond %{QUERY_STRING} .chi-siamo\.html$
RewriteRule ^index\.php$ ?lang=it [L,R=301]
Этот URL не обязательно совпадает с первоначально запрошенным URL, потому что любое количество правил возможно уже были применены к нему и соответственно преобразовали его.
Если используются шаблоны с отрицанием, вы не можете использовать $N в строках подстановок! Подстановка в правиле преобразования это строка будет подставляться (или будет заменять) вместо оригинального URL, для которого есть совпадение Шаблону. Кроме простого текста вы можете использовать:
1.обратные связи $N на шаблоны в RewriteRule
2.обратные связи %N на последний соответствующий шаблон в RewriteCond
3.переменные сервера в качестве проверяемых строк в условиях правил (%{VARNAME})
4.вызовы запросов к массиву (${mapname:key|default})
Первому 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.
- Взяли строку.
- Сравнили с регулярным выражением в первом аргументе.
- Если есть совпадение — заменили всю строку на значение второго аргумента.
- Передали строку следующему RewriteRule.
Флаги указываются в конце каждого правила в квадратных скобках через запятую.
Например:
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=переменная:значение. |
Комментариев нет:
Отправить комментарий