我的目标是将某些查询字符串属性及其值“列入白名单”,以便清漆不会改变网址之间的缓存。
例子:
Url 1: http://foo.com/someproduct.html?utm_code=google&type=hello
Url 2: http://foo.com/someproduct.html?utm_code=yahoo&type=hello
Url 3: http://foo.com/someproduct.html?utm_code=yahoo&type=goodbye
在上面的示例中,我想将“utm_code”而不是“type”列入白名单,所以在第一个 url 被点击后,我希望 varnish 将缓存的内容提供给第二个 url。
但是,在第三个 url 的情况下,属性“type”值不同,因此应该是清漆缓存未命中。
我尝试了以下两种似乎不起作用的方法(在我现在找不到的 drupal 帮助文章中找到)。可能是因为我的正则表达式错误。
# 1. strip out certain querystring values so varnish does not vary cache.
set req.url = regsuball(req.url, "([\?|&])utm_(campaign|content|medium|source|term)=[^&\s]*&?", "\1");
# get rid of trailing & or ?
set req.url = regsuball(req.url, "[\?|&]+$", "");
# 2. strip out certain querystring values so varnish does not vary cache.
set req.url = regsuball(req.url, "([\?|&])utm_campaign=[^&\s]*&?", "\1");
set req.url = regsuball(req.url, "([\?|&])foo_bar=[^&\s]*&?", "\1");
set req.url = regsuball(req.url, "([\?|&])bar_baz=[^&\s]*&?", "\1");
# get rid of trailing & or ?
set req.url = regsuball(req.url, "[\?|&]+$", "");