正则表达式匹配主机请求

jer*_*yjr 0 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);
}
Run Code Online (Sandbox Code Playgroud)

谁能解释为什么我在“www.example.com”上收到 403?

谢谢

ste*_*ema 5

我不知道 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";
  }
Run Code Online (Sandbox Code Playgroud)