如果请求的 URI 不是 www 或非 https,我尝试让 HAProxy 重定向到正确的 URI。我遇到的问题是,它一碰到一行就会重定向,导致多次重定向。
这是我的配置:
*snip*
frontend traffic-in
bind *:80
bind *:443 ssl crt /etc/haproxy/certificate.bundled.pem
reqrep ^(.*)[^/]$ \1/
redirect prefix https://www.example.com 301 if { hdr(host) -i beste.nl }
redirect scheme https code 301 if !{ ssl_fc }
*snip*
如果我去http://example.com,它会首先将我重定向到http://example.com/, 其次是https://www.example.com。
我希望它重定向我一次,而不是多次,因为这会损害我们的 Google 排名。
如何将请求重定向到带有尾部斜杠和 ssl 的 URI?
答案1
如果你分离出一个 http 前端它可能会简化事情
frontend http_in
bind *:80
redirect prefix https://www.example.com code 301
frontend https_in
all www.example.com hdr_sub(host) www.example.com
bind *:443 ssl crt /etc/haproxy/certificate.bundled.pem
redirect prefix https://www.example.com code 301 if !www.example.com
...
答案2
您需要 3 个前端定义,如下所示:
frontend http
bind *:80
redirect scheme https code 301 if !{ ssl_fc }
frontend https
bind *:443 ssl crt /etc/haproxy/certificate.bundled.pem
#-------------------------
# todo: use backends here
#-------------------------
frontend www
bind *:80
acl has_www hdr_beg(host) -i www.
http-request add-header X-Host-Redirect yes if !has_www
redirect code 301 prefix //www.example.com if !has_www