Я пытаюсь заставить HAProxy перенаправить на правильный URI, если запрошенный URI не является www или https. Проблема, с которой я сталкиваюсь, заключается в том, что он перенаправляет, как только попадает в строку, что приводит к нескольким перенаправлениям.
Это моя конфигурация:
*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.
Как я могу перенаправить запрос на URI с завершающей косой чертой И ssl?
Если вы разделите 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
...
Вам нужно 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
Результат: http://example.com >> https://www.example.com