我们已弃用某些在http://localhost/test下可用的软件,现在可在http://localhost/app/testing下使用。我们正在使用HAProxy 1.4
因此,我希望通过haproxy将/test
的所有网址替换为/app/testing/
。我首先使用redirect prefix
尝试保留查询字符串,但未将/test
从网址中删除,并使用/app/testing/test/?id=x
。
frontend all
bind 0.0.0.0:80
timeout client 86400000
acl is_test path_beg /test
redirect prefix /app/testing code 301 if is_test
然后使用reqrep
,它似乎重定向到新软件,但网址中的/test
字符串永远不会被替换。
frontend all
bind 0.0.0.0:80
timeout client 86400000
reqrep ^([^\ :]*)\ /test[/]?(.*) \1\ /app/testing/\2
答案 0 :(得分:2)
由于版本1.4不能重写网址,我们也不想更新HAProxy,我们继续使用reqrep
并保持旧链接
reqrep ^([^\ :]*)\ /test[/]?(.*) \1\ /app/testing/\2
答案 1 :(得分:1)
使用redirect prefix
意味着,通过HAProxy示例,更多的是更改主机名,但保留路径。例如,http://apple.com/my/path可以通过以下方式重定向到http://orange.com/my/path
redirect prefix http://orange.com if apple
HAProxy 1.4 docs说:
使用"重定向前缀","位置"标头是由 串联的< pfx>和完整的URI路径
对我来说,这表明你会期待你为&#34;前缀&#34;将以路径中已有的为前缀。这解释了你所看到的行为。这对于更改到新域(例如从 apple.com 到 orange.com )非常有用,但保留原始路径(例如 / my / path < / em>的)。
您可以切换到使用redirect location
来替换整个网址。以下内容会将http://apple.com/my/path重定向到http://orange.com/path:
redirect location http://orange.com/path if apple
更新:
如果您想更改网址但保留查询字符串,请使用reqirep
或reqrep
重写网址,同时还要设置{{1}进入redirect prefix
。该URL将被重写,然后用户将被重定向到它,以便他们看到它。
您可以设置&#34;前缀&#34;到&#34; /&#34;。 HAProxy文档说:
作为特例,如果&lt; pfx&gt;完全等于&#34; /&#34;,然后什么也没有 在原始URI之前插入。它允许一个人重定向到 相同的URL(例如,插入cookie)。
使用您的代码示例,如下所示:
frontend