location ~ /pattern/ { ... } 是nginx中不区分大小写的正则匹配语法,~必须连写、前后空格不可省,用于匹配大小写变体;它属正则匹配,优先级低于=和^~,需置于其后以确保生效。

用 ~* 修饰符,写在 location 指令后、URI 前。
怎么写才有效
语法必须严格为:location ~* /pattern/ { ... },中间不能少空格,~* 是一个整体,不可拆开或颠倒。
-
location ~* /api/ { ... }→ 匹配/api/、/API/、/Api/等所有大小写变体 -
location ~* \.(jpg|png|gif)$→ 匹配.JPG、.Png、.GIF等结尾,不区分大小写 - 错误写法:
location ~ * /api/(空格分隔)或location *~ /api/(顺序错)都不生效
和其它匹配方式的区别
~* 只控制正则部分的大小写敏感性,它本身仍是正则匹配,所以支持 .、^、$、\d 等正则语法;而 ^~ 或无修饰符的前缀匹配,本身就不支持正则,也谈不上“区分大小写”——它们默认就是大小写敏感的字符串比较。
-
location ^~ /static/→ 只匹配以小写/static/开头的路径,/STATIC/不匹配 -
location /static/→ 同样只认小写开头,不是不区分大小写 - 真要让前缀也忽略大小写?Nginx 原生不支持,需改用
~*+ 正则模拟,例如:location ~* ^/[sS][tT][aA][tT][iI][cC]/
注意优先级问题
~* 属于正则匹配,在 Nginx 的匹配顺序中排在 = 和 ^~ 之后。即使你写了 location ~* /admin/,只要上面有 location = /admin/ 或 location ^~ /admin/,就会优先进入那条规则,不会走到 ~* 这里。
- 想确保不区分大小写的路径被处理,建议把
~*规则放在所有=和^~规则之后 - 避免多个正则规则冲突:同级
~*按配置文件中出现的**自上而下顺序**匹配,第一个成功即终止,后面不再检查











