2017-06-06 84 views

回答

0

你說你想「重寫」,但這是一個經常被濫用的術語。你有什麼打算?

  • 是否要重寫傳入的URL,然後使用HTTP重定向更改瀏覽器地址欄中的地址?

如果是這樣,在代理配置:

http-request redirect prefix https://example.org if { hdr(host) -i example.com } 

這改變example.comexample.org並告訴瀏覽器再問。

測試:

curl -v https://example.com/foo/bar/1234?query=yes 
... 
< HTTP/1.1 302 Found 
< Cache-Control: no-cache 
< Content-length: 0 
< Location: https://example.org/foo/bar/1234?query=yes 
< Connection: close 

這是最簡單的解決辦法,如果它適合你的需要,因爲最終的結果是,瀏覽器實際上是做了正確的請求本身,減少意外行爲的可能性。

  • 還是你想改變Host:頭後端服務器看到的,但不能發送重定向消息,並且離開瀏覽器的地址欄中顯示爲它是什麼?

這改變example.comexample.org在後端服務器看到在從HAProxy的請求中的報頭Host:

http-request set-header Host example.org if { hdr(host) -i example.com } 

這樣做到底是什麼目的,但它可能不會有理想的結果,特別是如果應用程序知道其他的不一致,如輸入Referer:Origin:是不符合Host:,或者如果它使用cookie做非便攜式的事情,在這種情況下,可能需要進一步的頭部重寫(可能在兩個方向)或應用程序更改。

+0

我想重寫傳入的URL,然後用HTTP重定向在瀏覽器的地址欄中更改地址。我嘗試了你的建議,但沒有奏效。我只想'/ product'做重定向,所以如果客戶請求/購物車,它不會做重定向。我嘗試了下面的內容,但是如果{hdr(host)-i bbb.com/product}'不支持'http-request重定向前綴https://%[req.hdr(Host)]/product。你知道我做錯了什麼嗎? –

+0

'http-request重定向前綴https://example.org if {hdr(主機)-i example.com} {path_beg/product}'還請注意,'{''}'必須在它們之間至少有一個空格和任何相鄰的字符。不要在這裏使用'%[req.hdr(Host)]' - 這沒有意義,它是一個路由循環。 –