Я работаю с 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 }
Я опубликовал одно решение для этого в другом потоке (Используйте 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