![nginx httpMapModule 正则表达式变量](https://linux22.com/image/606878/nginx%20httpMapModule%20%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F%E5%8F%98%E9%87%8F.png)
这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 中的正则表达式中起作用吗?
答案1
(?P<name>pattern)
是命名捕获组的标准 PCRE 语法 - 文档缺少P
。
这维基百科上的“命名子模式”部分指出(?<name>...)
并且(?'name'...)
对 PCRE 7.0 及以上版本有效;大概您的 nginx 版本与早期版本的 PCRE 相链接。