![匹配 HAproxy 中除两个特定子域之外的通配符域](https://linux22.com/image/723488/%E5%8C%B9%E9%85%8D%20HAproxy%20%E4%B8%AD%E9%99%A4%E4%B8%A4%E4%B8%AA%E7%89%B9%E5%AE%9A%E5%AD%90%E5%9F%9F%E4%B9%8B%E5%A4%96%E7%9A%84%E9%80%9A%E9%85%8D%E7%AC%A6%E5%9F%9F.png)
我有一条如下规则:
redirect scheme https code 301 if { hdr_end(Host) -i mydomain.live otherdomian.org } !{ ssl_fc }
但我希望规则忽略 sub1.otherdomain.org 和 sub2.otherdomain.org
我想做类似的事情:
redirect scheme https code 301 if { hdr_end(Host) -i mydomain.live otherdomian.org } unless { hdr_beg(host) -i sub1 sub2 } !{ ssl_fc }
但是我的语法不正确,我想我只需要以某种方式结合 if 和 except 。
我该如何实现这个目标?
答案1
为了清晰起见添加了换行符:
redirect scheme https code 301
if { hdr_end(Host) -i .mydomain.live .otherdomian.org }
!{ hdr_beg(host) -i sub1 sub2 }
!{ ssl_fc }
用通俗的语言来说,情况是这样的:
if (a) and (not (b)) and (not (c))
if
并且unless
只能用在表达式的开头。
答案2
acl a1 hdr_beg(host) -i sub1.otherdomain.org sub2.otherdomain.org
acl a2 hdr_end(Host) -i mydomain.live otherdomain.org
redirect scheme https code 301 if !a1 a2