Haproxy 根据查询字符串条件进行 301 URL 重定向

Haproxy 根据查询字符串条件进行 301 URL 重定向

使用在 Ubuntu 12.04 上运行的 Haproxy 1.5.12

我的网站收到很多这样的请求:

http://www.example.com/foo/bar/mypage.php?gallery=&position=3

正确的 URL 应该是:

http://www.example.com/foo/bar/mypage.php?gallery=photogallery&position=3

我已成功将请求重写为正确的 URL,但我还想向客户端发出 301 重定向。

关注此帖:使用 haproxy 重定向重写的 url我试过:

acl fix_gallery url_sub gallery=&
reqrep (.*)gallery=&(.*) \1gallery=photogallery&\2
redirect prefix / code 301 if fix_gallery

为了发挥创造力,我尝试过:

acl fix_gallery url_reg (.*)gallery=&(.*)
acl fix_gallery urlp_reg(gallery) -m str ""
acl fix_gallery urlp_reg(gallery) -m len 0

等等。但似乎什么都没起作用,所以我显然遗漏了一些东西。

有什么建议么?

谢谢

答案1

您可以使用利用关键字的 3 行配置来实现您想要的结果http-request

第一个设置了一个虚拟标题,我们将在接下来的两个中使用它。

http-request set-header X-Location-Path %[capture.req.uri] if fix_gallery

第二个执行修复 URL 查询所需的替换。

http-request replace-header X-Location-Path (.*)gallery=&(.*) \1gallery=photogallery&\2 if fix_gallery

最后一行指向改变后的 URL。

http-request redirect location http://www.example.com/%[hdr(X-Location-Path)] if fix_gallery

如果您只有一个域,这种方法就可以奏效,但可以构建http-request redirect适用于任何域和方案的线路。

http-request redirect location https://%[hdr(host)]/%[hdr(X-Location-Path)] if fix_gallery { ssl_fc }
http-request redirect location http://%[hdr(host)]/%[hdr(X-Location-Path)] if fix_gallery !{ ssl_fc }

相关内容