语法
location 规则 uri
规则 就是对uri的修饰
-
”=” uri不能为正则 只能是字符窜 一旦命中 立即停止
-
”~” 表示uri包含正则,并且区分大小写 就说如果你的uri是正则写的 一定要有~
-
“~”表示uri包含正则,但不区分大小写 就说如果你的uri是正则写的 一定要有~
-
”^~” 模糊匹配 不会匹配正则 一旦命中就停止 不会去匹配正则
举例
1. location /juejing {
return 100;
}
2. location = /juejin {
return 101;
}
3.location ^~ /juexi {
return 104;
}
4.location ^~ ^/jue$ {
return 105;
}
5.location ~* ^/JUEJIN09$ {
return 106;
}
6.location ~* /juejing$ {
return 107;
}
匹配流程
先进行把uri 进行精确匹配 模糊匹配 还有没有修饰的匹配(如 location /juejing 前面没修饰符) 如果命中精确匹配或者模糊匹配立即停止(精确匹配优先度最高) 获取到一个最长匹配(匹配到半个的不算)跟正则匹配对比 如果命中了正则的 则使用正则 没命中 则拿到最长的那个规则
比如我访问/juejing curl -I 域名/juejing
先看精确匹配 =/juejin 不匹配
模糊匹配^~ /juexi 不匹配
^~ ^/jue$ 不匹配 因为模糊匹配不走正则所以写了也没用
第1个 /juejing 然后也是最长的匹配 然后去匹配 5 6 的正则 第5个不匹配 第6个匹配 所以 返回107 如果(我说的是如果)第六个也不匹配 那么就返回第一个的 return 100
如果都没匹配 那么就返回404
总结
先进行普通匹配 也就是不是正则匹配的那种 如果是精确匹配或者模糊匹配 命中了 就停止
这里是书写顺序的
然后拿到符合匹配的uri最长的那个 也就是最符合的那个 去匹配正则 正则是有顺序的 一旦命中了 就停止 如果没命中正则 则返回最长的那个