一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Nginx Rewrite 规则中忽略大小写如何配

时间:2026-08-17 18:26:49 编辑:袖梨 来源:一聚教程网

Nginx rewrite规则忽略大小写需在分号前添加i标志,如rewrite ^/old/(.)$ /new/$1 permanent; i;,不可写在正则内或中间;location可用~提前不区分匹配,再配合rewrite处理。

在 Nginx 的 rewrite 规则中,默认是区分大小写的。若需忽略大小写(即不区分大小写匹配),需在正则表达式末尾添加 i 标志。

rewrite 规则中添加 i 标志

Nginx 使用 PCRE 正则引擎,支持在正则末尾加 i 实现忽略大小写匹配。这是最直接有效的方式。

  1. 语法格式:rewrite ^/oldpath/(.*)$ /newpath/$1 permanent; → 区分大小写
  2. 忽略大小写写法:rewrite ^/oldpath/(.*)$ /newpath/$1 permanent; i;(注意末尾的 i;
  3. i 必须紧接在分号前,且单独成段,不能写在正则内部(如 (?i) 不被 Nginx rewrite 支持)

location 块中配合使用更灵活

如果重写逻辑较复杂,建议结合 location ~* ~* 表示不区分大小写的正则匹配)来提前捕获 URL,再用 rewrite 处理:

  1. location ~* ^/ABC/(w+)$ { rewrite ^/ABC/(.*)$ /abc/$1 permanent; }
  2. 这里的 ~* 已让 location 匹配忽略大小写,后续 rewrite 可按需写,无需再加 i
  3. 适合需要统一处理多种大小写变体(如 /PAGE/page/Page)的场景

注意 rewrite 指令的作用域和执行顺序

rewrite 指令在 server 或 location 块中生效,且按书写顺序执行。忽略大小写只影响当前这条规则的匹配,不影响其他规则:

  1. 多个 rewrite 规则时,每条需单独加 i(如果都需要忽略大小写)
  2. 若在 if 块中使用 rewrite,同样适用 i 标志,但应避免滥用 if(Nginx 最新不推荐在 location 外使用 if)
  3. 测试时可用 curl -I http://domain/OLDPATH 验证是否 301/302 跳转成功,确认大小写变体是否都命中

常见错误与验证方法

容易出错的地方包括标志位置错误、混淆 ~~*、或误用 PCRE 内置标志:

  1. ✘ 错误写法:rewrite ^(?i)/old/(.*)$ /new/$1 permanent;(Nginx 不识别 (?i)
  2. ✘ 错误写法:rewrite ^/old/(.*)$ /new/$1 i permanent;i 不能插在中间)
  3. ✔ 正确写法:rewrite ^/old/(.*)$ /new/$1 permanent; i;
  4. 修改配置后务必运行 nginx -t 检查语法,再 nginx -s reload 生效

热门栏目