首页 > 解决方案 > VCL中的符号“~”是什么意思?

问题描述

我看到这是在varnish vcl if 语句“~”中使用的

if (req.url ~ "phpMyAdmin") {
    return (pass);
}

我知道它像==一段时间一样工作in_array()

if ( req.http.User-Agent ~ "(Android|iPhone|iPad|BlackBerry|SAMSUNG)") 
   return(pass);
}

有人可以解释一下它的实际含义。它也是默认的 php 运算符吗?它和使用有什么区别==

标签: varnish

解决方案


根据官方文档~匹配算子

==比较两个值,如果相等则返回真

~根据正则表达式检查值,如果值匹配则返回 true

~ 匹配。可以与正则表达式或 ACL 一起使用。

# match an IP address against an ACL
if (client.ip ~ local) {
  return (pipe);
} 

Varnish 使用 Perl 兼容的正则表达式 (PCRE)。要将标志发送到 PCRE 引擎,例如进行不区分大小写的匹配,请在括号内的问号后面添加标志,如下所示:

# If host is NOT example dot com..
if (req.http.host !~ "(?i)example\.com$") {
    ...
}

推荐阅读