Назад | Перейти на главную страницу

nginx httpMapModule regex переменные

В Документация HttpMapModule утверждает, что:

Начиная с 1.0.4, можно использовать регулярные выражения без учета регистра, добавив к шаблону префикс ~ *.

И приводит пример:

map $uri $myvalue {
    /aa                   /mapped_aa;
    ~^/aa/(?<suffix>.*)$  $suffix;
}

Я обновился до nginx/1.2.7 использовать это, и наивные регулярные выражения работают нормально, а переменные - нет. Когда я пробую указанный выше синтаксис, я получаю сообщение об ошибке:

nginx: [emerg] pcre_compile() failed: unrecognized character after (?< in "^/aa/(?<suffix>.*)$" at "suffix>.*)$"

Я также пробовал следующие синтаксисы, но ни один из них не работал:

~^(.*)$  $1;
~^(.*)$  \1;

но ни один из них тоже не работал.

Кто-нибудь знает, как заставить переменные работать в регулярных выражениях в HttpMapModule?

(?P<name>pattern) стандартный синтаксис PCRE для именованных групп захвата - в документации отсутствует P.

В Раздел "Именованные подшаблоны" в Википедии утверждает, что (?<name>...) и (?'name'...) действительны для PCRE 7.0 и новее; предположительно ваша версия nginx связана с более ранней версией PCRE.