HAProxy如何实现URL重定向时保留相同的路径/URI
HAProxy 跨域名全路径保留重定向配置方案
核心实现逻辑
不用逐URL匹配base,HAProxy内置的重定向指令支持直接引用原请求路径变量,仅替换域名部分即可实现需求。
最简配置示例
- 首先定义ACL匹配原请求域名:
# 匹配旧域名,-i表示忽略大小写,可同时匹配带www的域名 acl is_old_domain hdr(host) -i test1.com www.test1.com
- 配置重定向规则:
# 301永久重定向,prefix后填写新域名,HAProxy会自动拼接原请求的完整路径+查询参数 redirect prefix https://test2.com code 301 if is_old_domain
完整frontend配置参考
frontend https_in bind *:443 ssl crt /etc/haproxy/ssl/ # 旧域名匹配规则 acl is_old_domain hdr(host) -i test1.com www.test1.com # 重定向规则 redirect prefix https://test2.com code 301 if is_old_domain # 其他原有业务配置 default_backend app_server
进阶场景说明
- 临时重定向需求:把
code 301改为code 302即可 - 非标准端口场景需要保留原端口:改用
redirect location写法,手动拼接完整地址:
redirect location https://test2.com:%[dst_port]%[capture.req.uri] code 301 if is_old_domain
其中%[capture.req.uri]会直接读取原请求的完整URI(含路径和所有查询参数)
- 多旧域名跳转同一新域名:直接在ACL规则后追加所有需要跳转的旧域名即可,无需新增重定向规则:
acl is_old_domain hdr(host) -i test1.com www.test1.com test3.com www.test3.com
内容的提问来源于stack exchange,提问作者drawnup
相关产品推荐
相关产品推荐

