nginx的location匹配默认区分大小写,取决于修饰符:~为区分大小写的正则匹配,无修饰符为区分大小写的前缀匹配,~*为不区分大小写的正则匹配,=和^~也均区分大小写,无全局开关。

Nginx 的 location 默认是区分大小写的,但具体是否区分大小写,取决于你使用的匹配修饰符,而不是全局开关。
要实现区分大小写的匹配,直接用 ~ 修饰符即可;不加修饰符的前缀匹配(如 location /abc/ { ... })也默认区分大小写。
✅ 明确区分大小写的写法
-
~+ 正则表达式:严格区分大小写location ~ /BBS/ { return 200 "Matched with case-sensitive regex"; }-
http://example.com/BBS/→ 匹配成功 -
http://example.com/bbs/→ 不匹配
-
-
无修饰符的前缀匹配:也区分大小写(注意不是正则,是字符串前缀)
location /Admin/ { root /var/www; }-
/Admin/index.html→ 匹配 -
/admin/index.html→ 不匹配(路径名大小写不同)
-
❌ 想忽略大小写?用 ~*
如果你本意是“想让匹配不区分大小写”,那就必须显式使用 ~*:
location ~* /bbs/ {
return 200 "Case-insensitive match";
}
这样 /BBS/、/bbs/、/Bbs/ 都能匹配。
⚠️ 注意几个关键点
-
=精确匹配也区分大小写(这是它的本质,必须完全一致) -
^~是前缀匹配,同样区分大小写(它不走正则,但字符逐字比对) - Nginx 没有全局配置项来统一开启/关闭大小写敏感,一切由 location 修饰符决定
- 文件系统本身是否区分大小写(如 Linux 是,Windows 通常不是),会影响
root或alias对应的真实文件访问,但这和 location 匹配逻辑无关
? 小技巧:快速验证是否区分大小写
在配置中加两条对比规则,用 return 直接返回不同内容:
location ~ /Test/ {
return 200 "Upper-case T matched";
}
location ~ /test/ {
return 200 "Lower-case t matched";
}
然后分别请求 /Test/ 和 /test/,看返回内容是否不同 —— 就能确认是否生效且区分大小写。
基本上就这些。











