正则表达式如何匹配不包含固定字符串的子字符串.Traefik中的正则表达式



我有几个容器在同一个页面(some.website.com(中运行,带有traefik和docker-compose,我正在尝试制定一个规则,将每个带有引用的请求从某个子域转发到同一子域,前提是重定向上没有子域。

即:some.website.com/dolibarr/我尝试登录,但它将我发送到:some.website.com/answer.php?whatever

我已经用 traefik 规则解决了这个问题,所以它会把我送到: some.website.com/dolibarr/answer.php?whatever 但是还有其他几个子页面将我发送到 some.website.com/所以我必须为每个子页面制定一个规则。

我已经有的特雷菲克规则

labels:
- "traefik.enable=true"
- "traefik.backend=dolibarr"
- "traefik.dolibarr.frontend.rule=Host:${SUBDOMAIN}.${DOMAIN_NAME}.${DOMAIN_TLD};PathPrefixStrip:/${DOLIBARR_PATH}"
- "traefik.dolibarr_url_fix.frontend.rule=Host:${SUBDOMAIN}.${DOMAIN_NAME}.${DOMAIN_TLD};PathPrefix: /admin, /user, /expensereport, /index.php;HeadersRegexp: referer, ^https://${SUBDOMAIN}.${DOMAIN_NAME}.${DOMAIN_TLD}/${DOLIBARR_PATH}/"
- "traefik.dolibarr_url_fix.frontend.redirect.permanent=true"
- "traefik.dolibarr_url_fix.frontend.redirect.regex=https://${SUBDOMAIN}.${DOMAIN_NAME}.${DOMAIN_TLD}/dolibarr/(.*)"
- "traefik.dolibarr_url_fix.frontend.redirect.replacement=https://${SUBDOMAIN}.${DOMAIN_NAME}.${DOMAIN_TLD}/${DOLIBARR_PATH}/$$1"

正则表达式应该是类似 ^((?!多利巴尔(.(*$ 但我无法让它与 traefik 规则一起使用

我试图像我在开始时解释的那样做一个规则,所以只有当引用来自 some.website.com/dolibarr/(.*( 并且重定向不是 some.website.com/dolibarr/[以避免 some.website.com/dolibarr/dolibarr/] 时,它才会将我发送到 some.website.com/dolibarr/

你想做的是一个消极的展望。

Traefik 是用 Go 编写的,因此使用 Go 的正则表达式,该正则表达式不支持此处解释的负前瞻。你必须以一种你不使用它的方式重写你的正则表达式。

更新:实现您正在寻找的目标的一种方法是使用优先级来避免无限循环。还要小心naem冲突,最好使用尾部斜杠:

labels:
- "traefik.enable=true"
- "traefik.backend=dolibarr"
- "traefik.dolibarr.frontend.rule=Host:${SUBDOMAIN}.${DOMAIN_NAME}.${DOMAIN_TLD}; PathPrefixStrip:/${DOLIBARR_PATH}/"
- "traefik.dolibarr.frontend.priority=100"
- "traefik.dolibarr_url_fix.frontend.rule=Host:${SUBDOMAIN}.${DOMAIN_NAME}.${DOMAIN_TLD}; HeadersRegexp: referer, ^https://${SUBDOMAIN}.${DOMAIN_NAME}.${DOMAIN_TLD}/${DOLIBARR_PATH}/"
- "traefik.dolibarr_url_fix.frontend.priority=50"
- "traefik.dolibarr_url_fix.frontend.redirect.permanent=true"
- "traefik.dolibarr_url_fix.frontend.redirect.regex=https://${SUBDOMAIN}.${DOMAIN_NAME}.${DOMAIN_TLD}/(.*)"
- "traefik.dolibarr_url_fix.frontend.redirect.replacement=https://${SUBDOMAIN}.${DOMAIN_NAME}.${DOMAIN_TLD}/${DOLIBARR_PATH}/$$1"
- "traefik.dolibarr_trail_slash_fix.frontend.rule=Host:${SUBDOMAIN}.${DOMAIN_NAME}.${DOMAIN_TLD}; Path:/${DOLIBARR_PATH}"
- "traefik.dolibarr_trail_slash_fix.frontend.priority=10"
- "traefik.dolibarr_trail_slash_fix.frontend.redirect.permanent=true"
- "traefik.dolibarr_trail_slash_fix.frontend.redirect.regex=https://${SUBDOMAIN}.${DOMAIN_NAME}.${DOMAIN_TLD}/${DOLIBARR_PATH}"
- "traefik.dolibarr_trail_slash_fix.frontend.redirect.replacement=https://${SUBDOMAIN}.${DOMAIN_NAME}.${DOMAIN_TLD}/${DOLIBARR_PATH}/"

相关内容

  • 没有找到相关文章

最新更新