首页 > 解决方案 > 在一次重定向中将 www 重定向到非 www 并将 http 重定向到 https?

问题描述

我一直试图让这个工作,但不能。

我知道我可以使用以下方式重定向 http -> https:

http-request redirect scheme https code 301 if !{ ssl_fc }

我知道我可以使用以下方式重定向 www -> non-www:

http-request redirect prefix https://%[hdr(host)] code 301 if { hdr_beg(host) -i www } 
// although note this doesn't work for me, it does nothing

我需要以下内容:

http://example.com/any-uri      -> https://example.com/any-uri
http://www.example.com/any-uri  -> https://example.com/any-uri
https://www.example.com/any-uri -> https://example.com/any-uri

如何使用单个 301 重定向同时执行 http -> https 和 www -> 非 www?

谢谢

标签: haproxy

解决方案


我有一个解决方案,尽管它需要两个规则。

http-request redirect prefix https://%[hdr(host),regsub(^www\.,,i)] code 301 if { hdr_beg(host) -i www. }
http-request redirect scheme https code 301 if !{ ssl_fc }

基于上述情况,将发生以下情况,所有这些都只有一个重定向:

http://example.com/any-uri      -> https://example.com/any-uri
http://www.example.com/any-uri  -> https://example.com/any-uri
https://www.example.com/any-uri -> https://example.com/any-uri

这是因为第一条规则捕获http://www...https://www...URL 并将它们重定向到https://example.com. 剩下的情况是http://example.com第二条规则通过简单的重定向到https://example.com.


推荐阅读