正则表达式替换Traefik提供404

时间:2018-07-19 11:01:37

标签: regex go traefik

我有一个在Traefik代理后面的码头工人。我尝试将所有流量(cdn除外)重定向到https://www.mysite.nl。我配置了一个正则表达式,如下所示。但不幸的是,它不起作用。我在所有主机上收到404。我想念什么?

新设置

您可以在此处测试正则表达式:https://regex101.com/r/mwt573/2

- traefik.frontend.priority=5
- traefik.frontend.rule=Host:mysite.nl, www.mysite.nl, mysite.com, www.mysite.com, cdn.mysite.net
- traefik.frontend.redirect.regex=^https?://(?:www.)?mysite\.(?:nl|com)(.*)
- traefik.frontend.redirect.replacement=https://www.mysite.nl$${1} 

旧设置

此设置对我有用,但没有将.com域重定向到.nl。它还在每个网址后放置一个/

- traefik.frontend.priority=5
- traefik.frontend.rule=Host:mysite.nl, www.mysite.nl, cdn.mysite.net, mysite.com, www.mysite.com
- traefik.frontend.redirect.regex=^https?://mysite.nl/(.*)
- frontend.redirect.replacement=https://www.mysite.nl/$${1}

2 个答案:

答案 0 :(得分:0)

我不确定为什么。但是删除非捕获组并转义该点对我有用。

工作示例:

 - traefik.frontend.priority=5
 - traefik.frontend.rule=Host:mysite.nl, www.mysite.nl, cdn.mysite.net, mysite.com, www.mysite.com
 - traefik.frontend.redirect.regex=^https?://(www.)?mysite(.nl|.com)(.*)
 - traefik.frontend.redirect.replacement=https://www.mysite.nl$${3}

答案 1 :(得分:0)

一段时间以来,我一直在使用docker run命令(可执行脚本文件)和regex /替换标签。这就是我将它用于www到非www网址重写的原因:

  1. 请注意,GO的正则表达式库略有不同-GO's regex lib here
  2. 您可以使用docker inspect命令在“标签”下进行检查 属性,如果运行脚本正确捕获了您的正则表达式。
  3. 双引号和单引号是一个问题,以某种方式双引号对我不起作用(可能是外壳去除了双引号,traefik无法计算没有标签的标签)...我怎么在表达式周围使用单引号没有任何其他问题。
  4. 在您的示例中,您都使用句点(点),根据定义,这是一个通配符。我试图对它们进行转义,但是GO的正则表达式库似乎错过了转义句点char的功能,因此我使用了charset [。](您不必转义句点)。
  5. 通过$ {}访问GO中捕获的组。但是我在他们的正则表达式文档中找不到它。我有来自try&error的信息。

我将www转换为非www的结果是:

-l traefik.frontend.redirect.regex='^https?://(?:www[.])(.*)'

-l traefik.frontend.redirect.replacement='https://${1}'

您声明的解决方案应该可以正常工作,我对此进行了略微重写:

-l traefik.frontend.redirect.regex='^https?://(?:www[.])?mysite[.](?:nl|com)(.*)'

-l traefik.frontend.redirect.replacement='https://www.mysite.nl${1}'