location ~ /a|/b {
location /a {
}
location /b {
}
}
但是,这会产生错误
nginx: [emerg] location "/a" is outside location "/a|/b" in /etc/nginx/nginx.conf:36
如果没有or
|
,这似乎还可以。location ~ /a {
location /a {
}
}
什么我做错了吗?有没有更好的方法可以执行此操作而无需重复任何操作?我可以用其他方式对位置进行分组吗?
#1 楼
这是个老问题,但是问题是因为父位置是正则表达式位置,而嵌套位置是前缀位置。您只能在父位置也是前缀位置时定义嵌套前缀位置:
location /a {
location /a {
# You can also skip this location and just write
# your code directly under the parent location
}
location /a/b {
...
}
}
当正则表达式定义父位置时,任何嵌套位置也必须由正则表达式定义:
location ~ ^/(a|b) {
location ~ ^/a {
...
}
location ~ ^/b {
...
}
}
但是,当父位置是前缀位置时,也可以定义嵌套的正则表达式位置:
location /a/b {
location ~ /a {
...
}
location ~ /b {
...
}
}
评论
我对你的第一句话感到困惑,但是你的例子很有道理。我假设在上一个示例中,前缀位置/ b将引发错误?
–贾恩
2014年9月10日,下午1:33
第一句话应该在文档中。
– AndreKR
15年4月15日在7:13
在第一个示例中,如果省略了位置/ a {}样板-顺序重要吗?
– Meekohi
17年5月15日在20:46
没关系,我误会了。嵌套位置不会从其父位置继承任何内容。
– Meekohi
17年5月15日在20:52
父位置可以是非正则表达式位置,但是父内部的任何多个嵌套位置都必须是正则表达式/非正则表达式。
– MitchellK
18年6月26日在7:45
评论
为什么要分组?为什么不只是KISS?forum.nginx.org/read.php?2,174517,174534#msg-174534
因为在逻辑上它们是分组的
这花了我很长时间才能理解,但最终我能够创建一个简单的(优先级)优先级列表来选择位置。