All remaining directives with conventional strings, longest match first. If this match used the ^~ prefix, searching stops.
If #3 yielded a match, that result is used. Else the match from #2 is used.
所有剩下的常规字符串,最长的匹配。如果这个匹配使用^〜前缀,搜索停止。
如果第3条规则产生匹配的话,结果被使用。否则,如同从第2条规则被使用。
---------- 翻译成人话 ----------
对所有的location匹配一遍, 过滤出合适的location之后
如果找到=匹配, 就不再找了, 执行
上面的没有, 继续找
如果找到^~匹配, 就不再找了, 执行
上面的没有, 继续找
如果找到正则匹配, 按 物理顺序, 定优先
上面的没有, 继续找
如果找到普通匹配, 按 物理顺序 定优先
备注: 同样的正则, 或同样的普通匹配, 按物理顺序, 不按最大匹配
如:
locaiton ~ /a/b {return 666}
locaiton ~ /a/b/c {return 777}
请求
/
语法 | 匹配规则 |
---|---|
空 | 普通匹配(遵循最大前缀匹配规则,优先度比正则低) |
= | 精确(严格)匹配, 优先度最高,后续不再匹配正则 |
^~ | 非正则匹配(依然遵循最大前缀匹配规则),后续不再匹配正则 |
~ | 表示区分大小写的正则匹配 |
~* | 表示不区分大小写的正则匹配 |
/ | 通用匹配,任何请求都会匹配到(本质上等同于语法空) |
翻译成人话
第一优先级
=, ^~
第二优先级
正则, 同样正则下, 最大匹配和物理顺序
剩下
普通, 最大匹配和物理顺序
##### location 匹配测试 #####
普通location, 这个(空)不能与 ^~一样, 因为同属普通匹配
#location /a/c {
return 555; }
#正则location
location ~ /a/c {
return 999;
}
#正则location
location ~* /a/c {
return 888;
}
#普通location, 第二优先级, 与 (空)匹配 不能一样, 因为同属普通匹配
#location ^~ /a/c {
# return 777;
#}
#精确location, 最大优先级, 可以与普通匹配一样
location = /a/c {
return 666;
}