nginx的location匹配规则
「=」修饰符:要求路径完全匹配
1 2 3 4 5
| server { server_name localhost; location = /abcd { } }
|
http://website.com/abcd
匹配
http://website.com/ABCD
可能会匹配 ,也可以不匹配,取决于操作系统的文件系统是否大小写敏感(case-sensitive)。ps: Mac 默认是大小写不敏感的,git 使用会有大坑。
http://website.com/abcd?param1¶m2
匹配,忽略 querystring
http://website.com/abcd/
不匹配,带有结尾的/
http://website.com/abcde
不匹配
「~」修饰符:区分大小写的正则匹配
1 2 3 4 5
| server { server_name localhost; location ~ ^/abcd$ { } }
|
^/abcd$
这个正则表达式表示字符串必须以/
开始,以d
结束,中间必须是abcd
http://website.com/abcd
匹配(完全匹配)
http://website.com/ABCD
不匹配,大小写敏感
http://website.com/abcd?param1¶m2
匹配
http://website.com/abcd/
不匹配,不能匹配正则表达式
http://website.com/abcde
不匹配,不能匹配正则表达式
「~*」修饰符:不区分大小写的正则匹配
1 2 3 4 5
| server { server_name localhost; location ~* ^/abcd$ { } }
|
http://website.com/abcd
匹配 (完全匹配)
http://website.com/ABCD
匹配 (大小写不敏感)
http://website.com/abcd?param1¶m2
匹配
http://website.com/abcd/
不匹配
,不能匹配正则表达式
http://website.com/abcde
不匹配
,不能匹配正则表达式
「^~」修饰符:前缀匹配,若匹配则不进行后续正则表达式检测
匹配优先级
1
| (location =) > (location ^~ 路径) > (location ~,~* 正则顺序) > (location 完整路径) > (location 部分起始路径) > (/)
|