我在这里提出这个问题是因为我认为这更像是一个正则表达式问题,而不是实际的清漆问题。
我基本上想要做的是定义清漆将缓存的域列表。已经有了答案,但我想采用不同的方法。
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
任何其他子域都可以传递给后端。
答案 0 :(得分:5)
如果我正确地阅读了您的问题,那么您有一个包含同一网站多个版本的列表,因此www.foobar.com和/或foobar.com并且您只想匹配foobar.com
如果是这样,您需要使用(?<!www)
返回引用。因此,仅匹配没有前面的www的域的搜索将是(?<!www\.)((?:[^.\s]+)\.(?:com|net|nl))
希望有所帮助
修改
如果域名未知,则 (?<!www\.)((?:[^.\s]+)\.(?:\w{2,3}))