~*修饰符可实现Nginx请求路径不区分大小写的正则匹配,适用于静态资源、API入口等明确结构场景,原生支持无需额外模块,但仅控制当前location匹配行为,不改变后端实际路径大小写敏感性。

直接用 ~* 修饰符就能让 Nginx 对请求路径做不区分大小写的正则匹配,这是最常用、最轻量、也最推荐的方式。
用 ~* 匹配固定路径或后缀
适用于静态资源、API 入口、页面路由等结构明确的场景。Nginx 原生支持,无需额外模块。
- 匹配图片、样式、脚本等资源:
location ~*\.(jpg|jpeg|png|gif|css|js|svg)$ { ... }这样/IMG.JPG、/Css/style.CSS都能命中同一规则 - 统一入口页面(如 about、terms):
location ~* ^/(about|privacy|terms|contact)$ { alias /var/www/html/main/$1.html; }注意:alias要求末尾斜杠严格匹配;若路径拼接易出错,建议改用root+index
用 ~* 配合 rewrite 实现小写重定向
当需要将大写路径标准化为小写并跳转(例如 SEO 友好或缓存一致),可用 if + rewrite 组合,但只适用于简单路径,避免参数干扰。
- 全局简单转换(慎用):
if ($uri ~ [A-Z]) { rewrite ^(.*)$ $1 permanent; }⚠️ 这会触发 301 重定向,浏览器地址栏会变化;且不能放在location块内直接用rewrite ... last,否则可能循环匹配 - 更安全的做法是限定范围:
location /static/ { if ($uri ~ [A-Z]) { rewrite ^(.*)$ /static/$1 permanent; } }只对特定前缀启用,降低风险
注意 ~* 的作用边界
~* 只控制当前这条 location 规则的匹配行为,不是全局忽略大小写。
- 它不会改变文件系统或后端服务本身的大小写敏感性。比如匹配成功后,Nginx 仍会把原始 URI(含大写字母)原样转发给 Tomcat 或 MinIO —— 若后端不认大写路径,仍会返回 404
- 若需真正“转换路径”再转发,得配合
rewrite ... break修改$uri,或用 OpenResty 的rewrite_by_lua_block在代理前统一小写化 - 优先级上,
~*属于正则匹配,低于=和^~,高于普通前缀匹配(如location /api);多条~*按配置顺序执行,第一条匹配即生效
什么情况下不适合用 ~*
不是所有需求都适合仅靠 ~* 解决:
- 路径结构复杂、含大量动态参数时,正则难维护 → 推荐用
map预定义映射表,再配合rewrite permanent - 必须在代理前修改 URI(如强制转小写发给对象存储)→ 用 OpenResty 或 Perl 模块,在请求阶段处理
$uri - 需要忽略大小写又保持原始路径语义(如日志、鉴权)→ 单纯
~*匹配即可,无需重写 URI


















