一个正则表达式,用于查找将由Varnish缓存的域

Sai*_*han 0 regex varnish

我在这里问这个问题是因为我认为这更像是一个正则表达式问题,而不是一个真正的清漆问题.

我基本上想要做的是定义清漆将缓存的域列表.已经有了答案,但我想使用不同的方法.

清漆:仅缓存特定域

现在,此答案中使用的代码如下:

sub vcl_recv {
   # dont cache foo.com or bar.com - optional www
   if (req.http.host ~ "(www)?\.(foo|bar)\.com") {
     pass;
   }
   # cache foobar.com - optional www
   if ( req.http.host ~ "(www)?\.foobar\.com" ) {
     lookup;
   }
}
Run Code Online (Sandbox Code Playgroud)

现在我想要的是有点不同.我有不同TLD的名称,但我只希望缓存域的非www版本.

所以只有mydomain.com,或myotherdomain.nl或yadomain.net

任何其他子域都可以传递给后端.

Jos*_*lis 5

如果我正确地阅读了你的问题你有一个列表,其中包含同一网站的多个版本,所以www.foobar.com和/或foobar.com都只想匹配foobar.com

如果是这样,您需要返回参考(?<!www).因此,只搜索没有前面的www的域的搜索将是(?<!www\.)((?:[^.\s]+)\.(?:com|net|nl))

希望有所帮助

编辑

(?<!www\.)((?:[^.\s]+)\.(?:\w{2,3})) 如果域名未知