nginx 中 location ~* 支持不区分大小写的 pcre 正则匹配,作用于 uri 路径部分(不含查询参数),优先级介于 =、^~ 与普通前缀匹配之间,需注意转义特殊字符并避免滥用以保障性能。

在 Nginx 中,location ~* 本身就能实现不区分大小写的正则匹配,无需额外配置。关键在于正确书写正则表达式,并理解其作用范围。
location ~* 的基本用法
~* 是 Nginx 的正则匹配修饰符,表示“不区分大小写的 PCRE 正则匹配”。它会忽略 URI 中字母的大小写,直接按正则逻辑比对路径。
- 与
~(区分大小写)和^~(前缀匹配优先)不同,~*专为大小写灵活的场景设计 - 匹配发生在 URI 解码后、但尚未处理查询参数(即只看
/path/to/xxx部分) - 一旦匹配成功,将执行该 location 块内的指令(如 proxy_pass、return、rewrite 等)
常见写法示例
以下配置均能匹配 /API/user、/api/User、/ApI/USER 等任意大小写组合:
-
location ~* ^/api/user$ { ... }—— 精确匹配单个路径 -
location ~* ^/api/ { ... }—— 匹配所有以/api/开头的路径(注意末尾斜杠) -
location ~* \.(jpg|png|gif)$ { ... }—— 不区分大小写匹配图片后缀(.JPG或.Png同样生效)
注意事项与避坑点
实际使用中容易忽略几个细节:
-
优先级高于普通前缀匹配,但低于
=和^~:如果同时存在location ^~ /api/和location ~* ^/api/,Nginx 会优先选^~,不会进入~*块 -
正则中的特殊字符需转义:比如匹配字面量点号
.,必须写成\.;斜杠/在正则中无需转义(除非在某些分隔场景) -
避免过度使用:正则匹配比前缀匹配慢,高频路径建议用
location /api/ { ... }+ 内部 rewrite 或应用层处理大小写
配合 rewrite 实现统一小写跳转(可选增强)
若需强制标准化路径(如把大写路径 301 重定向为小写),可在 ~* 块中结合 rewrite:
location ~* ^/API/(.*)$ {<br> rewrite ^/API/(.*)$ /api/$1 permanent;<br>}
这样访问 /API/user 会永久跳转到 /api/user,既兼容大小写,又利于 SEO 和缓存一致性。











