用 ~ 修饰符启用pcre正则引擎实现严格大小写匹配,语法为 location ~ /正则/ { ... },按配置顺序优先匹配,特殊字符需转义,不覆盖 = 或 ^~ 的高优地位。

用 ~ 修饰符就能实现区分大小写的正则匹配。它会启用 PCRE 正则引擎,严格按字母大小写比对,不自动转换、不忽略差异。
怎么写才生效
语法必须是 location ~ /正则表达式/ { ... },注意空格和波浪线不能省略:
-
location ~ /api/[A-Z]+/v\d+/—— 只匹配/api/USER/v1/,不匹配/api/user/v1/ -
location ~ ^/Admin/.*\.php$—— 匹配/Admin/index.php,但不匹配/admin/login.php - 正则中特殊字符如
.、?、$必须转义,例如\.jpg$表示以 .jpg 结尾
匹配行为要点
~ 匹配不是“全部扫描”,而是按配置顺序逐行尝试,一旦命中就立即执行对应块,停止后续同级正则检查:
- 多个
~块共存时,谁写在前面谁优先(不看 URI 长短) - 它和
~*是并列关系,互不影响优先级,只按出现顺序竞争 - 不会覆盖
^~或=的高优地位:如果= /login和~ /login同时存在,=一定先胜出
常见误点提醒
区分大小写是正则本身的特性,不是 location 的默认行为;普通前缀匹配(比如 location /API/)也区分大小写,但那只是字节逐一对比,不走正则引擎:
-
location /API/和location ~ /API/效果可能一样,但原理不同:前者是字符串前缀,后者是正则锚定 - 想确保大小写敏感,别依赖普通匹配去“碰巧”生效,明确用
~更可靠、意图更清晰 - 调试时可在 block 内加
add_header X-Location-Match "api-upper";,用curl -I验证是否真走到了该规则











