~*修饰符实现不区分大小写的正则匹配,Nginx将URI转小写后比对;需转义特殊字符,按配置顺序匹配,优先级低于=和^~,适用于动态路径而非简单后缀。

用 ~* 修饰符就能实现不区分大小写的正则匹配。
基本写法和语法
在 location 指令中,以 ~* 开头,后面紧跟 PCRE 风格的正则表达式:
-
location ~* \.(jpg|jpeg|png|gif)$—— 匹配所有以 .jpg、.JPG、.Png 等结尾的请求 -
location ~* /api/v[0-9]+/users—— 匹配/api/v1/users、/API/V2/USERS、/Api/v3/Users等任意大小写组合
关键注意事项
这种匹配不是“自动忽略大小写”的模糊搜索,而是 Nginx 内部将请求 URI 全部转为小写后,再与正则做比对。所以它只影响字母 a–z/A–Z,数字、符号、路径分隔符 / 等仍按原样处理。
- 正则中的特殊字符(如
.、?、$、+、(、))必须正确转义,否则会出错或误匹配 -
$表示 URI 末尾,常用于精确控制后缀,例如\.js$只匹配以 .js 结尾的,不匹配/script.js?v=1(除非你显式允许查询参数) - 多个
~*规则按配置文件中出现的**顺序依次尝试**,首个匹配即生效,后续不再检查
和其它匹配方式的关系
~* 的优先级低于 = 和 ^~,但高于普通前缀匹配(如 location /admin/)。也就是说:
- 如果同时存在
location ^~ /static/和location ~* \.css$,所有/static/xxx.css请求都会走^~分支,根本不会进入正则匹配 - 若只是简单判断后缀(如图片、字体、JS),优先考虑
^~或location /assets/+ 静态 root,性能更好;只有真正需要灵活模式(比如版本号、动态路径段)时才用~*
常见错误提醒
别把 ~* 和普通前缀匹配混淆:
-
location /API/是严格字节匹配,只响应小写/api/?不,它只匹配字面量/API/,/api/完全不命中 -
location ~* /api/才能同时覆盖/api/、/API/、/Api/ - 不要写成
location ~* /API/并指望它也匹配/api/——正则本身不区分大小写,但书写形式不影响逻辑,只要正则没写死大写,就自然兼容


















