Rewrite

查詢字元串條件下的 Haproxy 301 URL 重定向

  • December 18, 2018

使用在 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

還有很多。但似乎沒有任何效果,所以我顯然錯過了一些東西。

有什麼建議麼?

謝謝

http-request您可以使用 3 行利用關鍵字的配置來實現您正在尋找的東西。

第一個設置一個我們將在以下兩個中使用的虛擬標頭。

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 }

引用自:https://serverfault.com/questions/767075