我找不到类似的问题,还有其他人提到https重定向,但没有提到最小化重定向。
一直在寻找解决方案,但还是无法解决。
我们使用Docker> Traefik for WordPress并将www作为WordPress的首选版本。有多个WP实例。域是动态添加的。
但是,使用此配置,我收到两个重定向,从http到https到https www
$this->db->or_where()
有没有办法最小化重定向?
理想情况下来自
的301重定向http://example.com/
https://example.com/
https://www.example.com/
Traefik配置文件如下
http://example.com directly to https://www.example.com
答案 0 :(得分:5)
尝试用以下内容替换您的[entryPoints.http.redirect]
条目:
[entryPoints.http.redirect]
#entryPoint = "https"
regex = "^http:\/\/(www\.)*(example\.com)(.*)"
replacement = "https://www.$2/$3"
permanent = true
它不会处理https://example.com/
条目,因此您需要添加:
[entryPoints.https.redirect]
regex = "^https:\/\/(example\.com)(.*)"
replacement = "https://www.$1/$2"
permanent = true
如果您有多个frontedns,则正则表达式可能会很难处理,因此您可以考虑使用a label on the container,如下所示:
traefik.frontend.headers.SSLRedirect=true
traefik.frontend.headers.SSLHost=www.example.com
从1.7开始,有一个新选项SSLForceHost
甚至可以强制重定向现有的SSL连接。
traefik.frontend.headers.SSLForceHost=true
答案 1 :(得分:0)
这就是我与AWS ELB背后的docker provider一起工作的方式。
traefik容器
/usr/bin/docker run --rm \
--name traefik \
-p 5080:80 \
-p 5443:443 \
-v /etc/traefik/traefik.toml:/etc/traefik/traefik.toml \
-v /var/run/docker.sock:/var/run/docker.sock \
traefik
traefik.toml
defaultEntryPoints = ["http", "https"]
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.https]
address = ":443"
码头工人标签
-l traefik.enable=true \
-l traefik.http.middlewares.redirect.redirectregex.regex="^http://(.*)" \
-l traefik.http.middlewares.redirect.redirectregex.replacement="https://\$1" \
-l traefik.http.routers.web-redirect.rule="Host(\`domain.com\`)" \
-l traefik.http.routers.web-redirect.entrypoints="http" \
-l traefik.http.routers.web-redirect.middlewares="redirect" \
-l traefik.http.routers.web-secure.rule="Host(\`domain.com\`)" \
-l traefik.http.routers.web-secure.entrypoints="https" \
ELB监听器
答案 2 :(得分:0)
这就是我要做的。上面的答案是有帮助的,但是traefik不会启动,因为您实际上需要双精度\来在.toml中转义。
此外,您仍然需要确保那里具有正常的入口点和端口。 这是我完整的entryPoints部分:
[entryPoints]
[entryPoints.http]
address = ":80"
[entryPoints.https]
address = ":443"
[entryPoints.http.redirect]
regex = "^http:\\/\\/(www.)*(example\\.com)(.*)"
replacement = "https://www.$2/$3"
permanent = true
[entryPoints.https.redirect]
regex = "^https:\\/\\/(example.com)(.*)"
replacement = "https://www.$1/$2"
permanent = true
[entryPoints.https.tls]
答案 3 :(得分:0)
首先删除entrypoint
,然后向您的http.redirect
添加正则表达式/替换规则,例如:
[entryPoints.http.redirect]
regex = "^http://(?:www.)?site.example/(.*)"
replacement = "https://www.site.example/$1"
您删除entrypoint
的原因是因为Traefik docs state:
请注意,如果为重定向定义了
regex
,则不必在重定向结构中设置replacement
和entrypoint
(在本指南中将不使用它们情况)。
(加粗强调)
Traefik对语法非常宽容,因此您无需转义斜杠。括号内的?:
使其成为不捕获组,因此replacement
分配的值可以使用$1
而不是$2
。
请注意,替换操作也使用域名前面的https
方案。这是阻止第二次重定向的原因,因为替换规则是同时添加www
和切换协议。
现在对https.redirect
做同样的事情,像这样:
[entryPoints.https.redirect]
regex = "^https://(?:www.)?site.example/(.*)"
replacement = "https://www.site.example/$1"
请注意,regex
除了这次替换以外,还使用https
方案。这就是常规重定向所需要的。要使重定向永久生效,您可以添加permanent = true
以使用308
重定向。
使用curl -I
测试您的工作,并针对每个URL运行它。如果一切正常,您应该期望看到以下两种状态之一:
HTTP/1.1 308 Permanent Redirect
HTTP/2 200
所有URL应该使用www
和https
格式正确。对于Traefik 2.x,情况有所变化。升级时请参见Redirect non-www to www Traefik v2,以获取基于标签的方法。