我正在尝试根据某些条件重写 URI 以及主机标头。以下是我想要实现的示例:
我要求http://sub1.example.com/test/files/other
if hdr_beg(Host) sub1.example.com and path_beg /test
rewrite host header to sub2.example.com
rewrite URI to /files/other (in other words, remove test from the URI)
最终结果应该指向 sub2.example.com/files/other,而用户却不知情。
我尝试过以下配置:
acl host_beg_sub1 hdr_beg(Host) sub1.example.com
acl path_beg_test path_beg /test
rewrite host header if host_beg_sub1 path_beg_test
rewrite URI if host_beg_sub1 path_beg_test
显然,这不能按预期工作,因为在主机头被修改后,第二次重写将不会触发。
由于其他流量的 URI 可能以测试开头,因此我无法无条件重写。
提前致谢!
答案1
如果您想要进行大量替换,您可能需要考虑将它们放在后端。
frontend
acl host_beg_sub1 hdr_beg(Host) sub1.example.com
acl path_beg_test path_beg /test
use_backend sub2redirect if host_beg_sub1 path_beg_test
backend
reqirep ^Host:\ sub1.example.com Host:\ sub2.example.com
reqirep ...url rewriting
server ...