Назад | Перейти на главную страницу

Перенаправить домен на второй с сохранением префикса-поддомена

Я работаю с 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