5. RewriteOptions и RewriteRule директивы

Автор: Aport Пятница, Январь 30th, 2015 Нет комментариев

Рубрика: Разное

RewriteOptions Директива

Описание:

Устанавливает кое-какие специальные опции для механизма
преобразований

Синтаксис:

RewriteOptions Options

Значение по умолчанию:

None

Контекст:

server configvirtual hostdirectory.htaccess

Разрешение:

FileInfo

Статус:

Расширение

Модуль:

mod_rewrite

Директива RewriteOptions устанавливает некоторые
специальные опции для текущей конфигурации в контексте сервера или каталога.
Строки Option могут иметь следующий вид:

  • inherit
    Это приводит в действие
    наследование текущей конфигурацией конфигурации родителя. В контексте
    виртуального сервера это означает что ассоциативные массивы, условия и правила
    основного сервера наследуются. В контексте каталога это означает что условия
    и правила в конфигурационных файлах .htaccess родительских
    каталогов наследуются.

RewriteRule Директива

Описание:

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

Синтаксис:

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, для которого естьсовпадение
Шаблону. Кроме простого текста вы можете использовать

  1. обратные связи $Nна шаблоны в RewriteRule
  2. обратные связи %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(см. ниже).

Источник: yapro.ru

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

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты