apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
nginx.ingress.kubernetes.io/use-regex: "true"
nginx.ingress.kubernetes.io/rewrite-target: /$2
name: rewrite
namespace: default
spec:
ingressClassName: nginx
rules:
- host: rewrite.bar.com
http:
paths:
- path: /something(/|$)(.*)
pathType: ImplementationSpecific
backend:
service:
name: http-svc
port:
number: 80
这会导致:
rewrite.bar.com/something
被重写为 rewrite.bar.com/
rewrite.bar.com/something/
被重写为 rewrite.bar.com/
rewrite.bar.com/something/new
被重写为 rewrite.bar.com/new
首先,我们需要一些有关于正则表达式的知识:
正则表达式中的括号代表分组,匹配第一个括号中的内容的部分就是第一组用$1表示,匹配第二个括号中的内容的部分就是第二组用$2表示。
第一个括号中的内容是
匹配正斜线 或 一句结尾
第二个括号中的内容是
点匹配任意字符,星号表示匹配0或者多个它的前面的字符,合起来的意思就是第一部分后面剩下的所有字符都被第二部分捕捉
现在再来看我们的例子
例子一 第一部分匹配了 美元符号 第二部分没有被匹配,为空
因此 /something被重写为 /$2 也就是 /空 也就是 /
例子二 第一部分匹配了 /
同理 $2为空, /something被重写为 /
例子三 第一部分匹配了 / 第二部分匹配了 new
$2 = new
/something/new 被重写为 /new