正则表达式匹配主机请求

时间:2013-05-02 13:51:52

标签: regex varnish

鉴于Varnish 3.0.2中的VCL代码:

sub vcl_recv {
  if (req.http.host !~ "^(?i)(www|m|mobile)\.example\.com$" || req.http.host !~ "^(?i)example\.com$") {
    error 403 "Forbidden";
  }
  return(lookup);
}

任何人都可以解释为什么我在www.example.com上获得403s?

由于

1 个答案:

答案 0 :(得分:4)

我不知道varnish及其语法,但我将||解释为逻辑OR。因此www.example.com与第二个替代==>不匹配这是真的,你输入if

可能你想要一个合乎逻辑的 AND ?如果两者都不成立,那么403?

所以试试:

if (req.http.host !~ "^(?i)(www|m|mobile)\.example\.com$" && req.http.host !~ "^(?i)example\.com$") {
    error 403 "Forbidden";
  }