В Документация 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.