nginx 中 location ~* 原生支持不区分大小写的 pcre 正则匹配,作用于解码后的 $uri(不含查询参数),如 ~* ^/about$ 可匹配 /about;需注意末尾斜杠、特殊字符转义及匹配优先级。

Nginx 中 location ~* 本身就能实现不区分大小写的正则匹配,无需额外配置。关键在于正确书写正则表达式,并理解其匹配范围和优先级。
location ~* 的基本用法
该语法表示使用不区分大小写的 PCRE 正则匹配请求路径($uri,不含参数)。例如:
-
location ~* ^/api/users$匹配/api/users、/API/USERS、/Api/Users等所有大小写变体 -
location ~* \.jpg$匹配任何以.jpg或.JPG、.Jpg结尾的 URI
注意匹配目标是 $uri,不是完整 URL
location 匹配的是解码后的路径部分(即 $uri),不包含查询参数(?key=value)和协议/域名。例如请求 https://example.com/AbOuT?ref=123,~* ^/about$ 仍能匹配成功,因为 $uri 是 /AbOuT,且 ^/about$ 在不区分大小写模式下成立。
避免常见陷阱
以下写法容易出错,需特别注意:
- 末尾斜杠影响匹配:
~* ^/admin$不匹配/admin/;如需兼容,写成~* ^/admin/?$ - 特殊字符需转义:
~* ^/file\?v=是错误的(?是正则元字符),应写为~* ^/file\?v=→ 实际要匹配字面量?,需用\?;但更推荐将带参逻辑交给if或后端处理 - 优先级高于前缀匹配:
location /api和location ~* ^/api$同时存在时,后者因正则匹配更精确而优先生效
实用示例:统一处理多写法入口
比如希望 /LOGIN、/login、/Login 都转发到同一后端:
location ~* ^/(login|signin|logon)$ {
proxy_pass http://auth_backend;
proxy_set_header Host $host;
}
这个块会匹配任意大小写的这三个路径,且仅限精确匹配(因有 ^ 和 $ 锚定)。










