配置 rewrite-target 的核心是必须用正则捕获组定义 path 并显式启用 use-regex: "true",否则重写失效易致 404;path 需为正则模式如 /v1(/|$)(.*),rewrite-target 中 $1、$2 严格对应其捕获顺序;≥0.22.0 版本要求 pathType 为 ImplementationSpecific,1.12+ 版本启用大小写不敏感匹配;可选 configuration-snippet 实现更灵活重写。

配置 rewrite-target 的核心是:路径 必须用正则表达式定义捕获组,且 use-regex: "true" 必须显式开启(尤其在 0.22.0+ 和 1.12+ 版本中)。否则重写不会生效,容易返回 404。
明确 path 正则与捕获组对应关系
path 字段不是普通前缀,而是正则模式,需用 (.*)、(/|$) 等捕获你要保留或替换的部分。例如:
-
path: /v1(/|$)(.*)→ 匹配/v1或/v1/xxx,其中$1是/或空,$2是后续路径(如user/list) -
path: /api/(.*)→$1就是user/profile - 错误写法:
path: /old—— 没有捕获组,rewrite-target无法取值
正确设置 rewrite-target 值
目标路径中的 、 等,严格对应 path 正则里的第几个捕获组(括号数量和顺序决定)。常见写法:
- 剥离前缀:
nginx.ingress.kubernetes.io/rewrite-target: /$2配合path: /v1(/|$)(.*) - 补全前缀:
nginx.ingress.kubernetes.io/rewrite-target: /api/$1配合path: /shop/(.*) - 完全替换:
nginx.ingress.kubernetes.io/rewrite-target: /newroot/$1配合path: /old/(.*)
注意版本兼容性细节
不同版本行为差异明显,需特别留意:
- Ingress-NGINX ≥ 0.22.0:pathType 必须为
ImplementationSpecific或明确支持正则的类型;path必须含捕获组 - Ingress-NGINX 1.12+:只要同一 host 下任一 Ingress 用了
rewrite-target,所有路径自动启用**大小写不敏感正则匹配**,可能影响其他规则 - 务必加
nginx.ingress.kubernetes.io/use-regex: "true"注解,避免被当作字面量路径处理
可选增强:用 configuration-snippet 灵活控制
当 rewrite-target 不够用(比如需多级判断或条件重写),可用 configuration-snippet 写原生 Nginx 指令:
- 示例:把所有
/api/xxx请求去掉/api前缀再转发:nginx.ingress.kubernetes.io/configuration-snippet: |<br> rewrite ^/api/(.*) /$1 break;
- 该方式绕过 rewrite-target 限制,但需确保语法正确,且仅作用于当前 Ingress


















