Nginx rewrite规则忽略大小写需在分号前添加i标志,如rewrite ^/old/(.)$ /new/$1 permanent; i;,不可写在正则内或中间;location可用~提前不区分匹配,再配合rewrite处理。
在 Nginx 的 rewrite 规则中,默认是区分大小写的。若需忽略大小写(即不区分大小写匹配),需在正则表达式末尾添加 i 标志。
Nginx 使用 PCRE 正则引擎,支持在正则末尾加 i 实现忽略大小写匹配。这是最直接有效的方式。
rewrite ^/oldpath/(.*)$ /newpath/$1 permanent; → 区分大小写rewrite ^/oldpath/(.*)$ /newpath/$1 permanent; i;(注意末尾的 i;)i 必须紧接在分号前,且单独成段,不能写在正则内部(如 (?i) 不被 Nginx rewrite 支持)如果重写逻辑较复杂,建议结合 location ~* (~* 表示不区分大小写的正则匹配)来提前捕获 URL,再用 rewrite 处理:
location ~* ^/ABC/(w+)$ { rewrite ^/ABC/(.*)$ /abc/$1 permanent; }~* 已让 location 匹配忽略大小写,后续 rewrite 可按需写,无需再加 i
/PAGE、/page、/Page)的场景rewrite 指令在 server 或 location 块中生效,且按书写顺序执行。忽略大小写只影响当前这条规则的匹配,不影响其他规则:
i(如果都需要忽略大小写)i 标志,但应避免滥用 if(Nginx 最新不推荐在 location 外使用 if)curl -I http://domain/OLDPATH 验证是否 301/302 跳转成功,确认大小写变体是否都命中容易出错的地方包括标志位置错误、混淆 ~ 和 ~*、或误用 PCRE 内置标志:
rewrite ^(?i)/old/(.*)$ /new/$1 permanent;(Nginx 不识别 (?i))rewrite ^/old/(.*)$ /new/$1 i permanent;(i 不能插在中间)rewrite ^/old/(.*)$ /new/$1 permanent; i;
nginx -t 检查语法,再 nginx -s reload 生效