我正在使用 HAProxy,希望能够将所有流量从域 A 重定向到第二个域 B,同时保留前缀/子域。
我尝试过类似的事情:
redirect prefix http://www.domainA.com code 301 if { hdr(host) -i http://www.domainB.com }
它可以工作,但我可能还有其他几个域,每个域都有子域。
我希望能够做类似的事情
redirect prefix http://*.domainA.com code 301 if { hdr(host) -i http://*.domainB.com }
redirect prefix http://*.domainA.com code 301 if { hdr(host) -i http://*.domainC.org }
在此例中,域 B 和 C 实际上是域 A 的别名。有没有办法让我只需要每个别名域输入一个条目?
为了进一步增加复杂性,我理想情况下希望忽略入站请求采用的协议(http
/ https
)并重定向到https
对于这个例子,我会考虑做类似的事情
redirect prefix http://*.domainA.com code 301 if { hdr(host) -i (http|https)://*.domainB.com }
redirect prefix http://*.domainA.com code 301 if { hdr(host) -i (http|https)://*.domainC.org }
答案1
我在另一个帖子中发布了一个解决方案(使用 haproxy 重定向.domain1.com/到.domain2.com/ )。
acl domain_redirect hdr_end(host) -i domain1.com
http-request set-var(req.new_host) req.hdr(host),regsub(domain1\.com$,domain2.com,i) if domain_redirect
http-request redirect prefix https://%[var(req.new_host)] code 301 if { var(req.new_host) -m found }
正如我在那里提到的,这个解决方案至少有一个缺点,它似乎会从 URL 中丢弃锚点。例如:
domain1.com?foo=bar#ze-anchor -> domain2.com?foo=bar