|
Описание: |
Устанавливает кое-какие специальные опции для механизма
преобразований |
|
Синтаксис: |
RewriteOptions Options |
|
Значение по умолчанию: |
None |
|
Контекст: |
server configvirtual hostdirectory.htaccess |
|
Разрешение: |
FileInfo |
|
Статус: |
Расширение |
|
Модуль: |
mod_rewrite |
Директива RewriteOptions устанавливает некоторые
специальные опции для текущей конфигурации в контексте сервера или каталога.
Строки Option могут иметь следующий вид:
- 'inherit'
Это приводит в действие
наследование текущей конфигурацией конфигурации родителя. В контексте
виртуального сервера это означает что ассоциативные массивы, условия и правила
основного сервера наследуются. В контексте каталога это означает что условия
и правила в конфигурационных файлах .htaccess родительских
каталогов наследуются.
|
Описание: |
Определяет правила для механизма преобразований |
|
Синтаксис: |
RewriteRule ШаблонПодстановка |
|
Значение по умолчанию: |
None |
|
Контекст: |
server configvirtual hostdirectory.htaccess |
|
Разрешение: |
FileInfo |
|
Статус: |
Расширение |
|
Модуль: |
mod_rewrite |
|
Совместимость: |
Флаг cookie доступен в Apache 2.0.40 и более
поздних. |
Директива RewriteRule и есть настоящая рабочая
лошадка преобразований. Эта директива может встречаться более одного раза.
Каждая директива, в этом случае, определяет одно правило преобразования.
Порядок определений этих правил важен, потому
что этот порядок используется при обработке правил во время работы.
Шаблон это perl совместимое регулярное
выражение которое применяется к текущему URL. Здесь под «текущим»
подразумевается значение URL когда применяется это правило. Этот URL
не обязательно совпадает с первоначально запрошенным URL, потому что любое количество
правил возможно уже были применены к нему и соответственно преобразовали
его.
Некоторые указания по синтаксису регулярных выражений:
Текст:
. Любой одиночный символ
[chars] Класс симвлолв: Один из символов
[^chars] Класс симвлолв: Ни один из символов
text1|text2 Альтернатива: text1 или text2
Кванторы (символы для обозначения количественных отношений):
? 0 или 1 из предшествующего текста
* 0 или N из предшествующего текста (N > 0)
+ 1 или N из предшествующего текста (N > 1)
Группировка:
(text) Группировка текста
(либо установка границ альтернативы или
для создания обратных связей где N группа, которая
может быть использована в RHS директивы RewriteRule с $N)
Маркеры:
^ Маркер начала строки
$ Маркер конца строки
Экранирование:
char экранирование конкретного символа
(к примеру для указания символов ".[]()" и т.д.)
Более подробную информацию о регулярных выражениях, смотрите в документации
по регулярным выражениям Perl ("perldoc perlre").
Если вы заинтересованы в ещё более детальной информации о регулярных выражениях
и их диалектах (POSIX и т.д.), смотрите следующую, специально
написанную по этой теме книгу:
Mastering Regular Expressions
Jeffrey E.F. Friedl
Nutshell
Handbook Series
O'Reilly & Associates, Inc. 1997
ISBN
1-56592-257-3
Кроме того, в mod_rewrite символ отрицания (NOT) ('!') —
допускаемый префикс в шаблоне. Это даёт вам возможность инвертировать действие
шаблона; ну к примеру скажем: "если текущий URLне совпадает
с этим шаблоном". Это может быть использовано в особых случаях, когда проще
найти шаблон для несоответствия, или в качестве последнего правила, работающего
по умолчанию.
Примечание
При использовании символа NOT (не) для инвертирования
действия шаблона вы не можете иметь сгруппированные части групповых символов
в шаблоне. Это невозможно потому что когда нет соответствия шаблону, для групп
нет никакого содержимого. В результате, если используются шаблоны с отрицанием,
вы не можете использовать $N в строках подстановок!
Подстановка в правиле преобразования это строка будет
подставляться (или будет заменять) вместо оригинального URL, для которого естьсовпадение
Шаблону. Кроме простого текста вы можете использовать
- обратные связи $N на шаблоны в RewriteRule
- обратные связи %N на последний соответствующий шаблон в
RewriteCond
- переменные сервера в качестве проверяемых строк в условиях правил
(%{VARNAME})
- вызовы запросов к массиву
(${mapname:key|default})
Обратные связи это $N (N=0..9)
идентификаторы которые заменяются содержимым N-й группы
подходящего Шаблона. Переменные сервера Это тоже самое что
и СравниваемаяСтрока директивы RewriteCond. Запросы
к массиву пришли из директивы RewriteMap там они и объяснены. Эти
три типа переменных рассматриваются в порядке, в котором они идут в
вышеприведенном списке.
Как уже было упомянуто выше, все правила преобразований применяются
с использованием Подстановки (в порядке, в котором они определены
в конфигурационном файле). URL полностью
заменяется Подстановкой и процесс преобразования идет до тех
пор, пока не останется больше никаких правил, если только он не прерван
специально, с помощью флага L — см. ниже.
Существует специальная строка подстановки вида '-' которая
означает: НЕТ подстановки! Звучит глупо? Нет, это полезно для
правил преобразования которые только проверяют некоторые
URL однако не производят
подстановок, т.е., в связке с флагом C (цепочка)
возможно иметь более чем один шаблон, применяемый перед проведением
непосредственно самой подстановки.
Ещё одно замечание: Вы даже можете создавать URL, содержащие строку запроса,
в строке подстановки. Просто используйте вопросительный знак внутри строки
подстановки для указания того, следующее за ним содержимое должно быть
преобразовано в QUERY_STRING (строку запроса). Когда вы хотите убрать
существующую строку запроса, завершайте строку подстановки просто вопросительным
знаком.
Примечание
Есть одна особенность: Когда вы предваряете поле подстановки
строкой http://thishost[:thisport], —
mod_rewrite отрезает её автоматически. Это автоматическое
усечение подразумеваемое при внешнем редиректе URL полезная и важная особенность при
использовании в связке с запросами к массивам преобразований генерирующих имя
хоста. Взгляните на первый пример, в разделе примеров ниже, чтобы понять это.
Помните
Безусловный внешний редирект на ваш собственный сервер не будет
работать с префиксом http://thishost из-за этой особенности. Чтобы
использовать такой саморедирект, Вы должны использовать флаг
R(см. ниже).