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

时间:2011-12-20 00:18:08

标签: regex varnish

我在这里提出这个问题是因为我认为这更像是一个正则表达式问题,而不是实际的清漆问题。

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

Varnish: cache only specific domain

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

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;
   }
}

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

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

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

1 个答案:

答案 0 :(得分:5)

如果我正确地阅读了您的问题,那么您有一个包含同一网站多个版本的列表,因此www.foobar.com和/或foobar.com并且您只想匹配foobar.com

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

希望有所帮助

修改

如果域名未知,则

(?<!www\.)((?:[^.\s]+)\.(?:\w{2,3}))