假设我有一个这样的URL www.example.com/a/b/sth:,我在Nginx配置中写了一个位置块:
location ^~ /a/b/(?<myvar>[a-zA-Z]+) {
# use variable $myvar here
if ($myvar = "sth") { ... }
}
Run Code Online (Sandbox Code Playgroud)
我希望能够使用$myvar从块内的URL捕获的变量,但是,Nginx一直告诉我这个变量没有定义,也不会启动:
nginx: [emerg] unknown "myvar" variable
Run Code Online (Sandbox Code Playgroud)
Ste*_*ini 58
老线程,但我有同样的问题......
我认为该错误与安装的PCRE版本无关
如果您的位置标记不是以〜开头,则NGINX不会解析您的正则表达式.您需要使用类似的东西
location ~ ^/a/b/(?<myvar>[a-zA-Z]+) {
# use variable $myvar here
if ($myvar = "sth") { ... }
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*rov 13
正如Stefano Fratini在他的回答中正确指出的那样,你的location声明有一个错误:对于正则表达式,你应该~单独使用,而不是^~.
命名捕获是PCRE的一项功能,它们在不同版本中具有不同的语法.对于您使用的语法,?<var>您必须至少拥有PCRE 7.0.
请参阅官方Nginx文档中的大量信息