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

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
  3. переменные сервера в качестве проверяемых строк в условиях правил (%{VARNAME})
  4. вызовы запросов к массиву (${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(см. ниже).
Оцени публикацию:
  • 1,5
Оценили: 1


Предложения и пожелания:

 

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2019 YaPro.Ru

Лебеденко Николай Николаевич
Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter