我正在寻找 Varnish 中规则(正则表达式)的一些帮助,我正在使用它来确保,例如,UTM 标签不会为我收到的每个唯一查询创建一个新的缓存条目。这是我的规则:
if (req.url ~ "(\?|\&)(utm|gclid|fbclid|mc)(_|=)") {
set req.url = regsub(req.url, "\?.*", "");
}
这很好用。如果字符串中有另一个我 not 不想删除的查询,问题就来了。例如:如果请求是
https://example/page/?fbclid=45435
,那么规则就可以正常工作。不管 fbclid
部分是什么,相同的页面都是从后端加载的。但是,如果 fbclid
部分出现在 another 查询之后——如果,例如,请求是 https://example/page/?app=346&fbclid=45435
——那么,显然,它也破坏了字符串的第一部分,并返回 /page/ 没有重要的正在处理的查询。 (当然,我已经告诉 Varnish 不要缓存去 ?app=
的请求)。
我在这方面不是特别擅长,所以我想确保我以正确的方式思考这个问题。如果我要更改我的规则,使其不查找
&
,那么我上面给出的示例将得到修复。但这也意味着 UTM 标签在我想保留的查询之后停留,并被传递到后端进行缓存。
基本问题:什么是我去除
utm
、gclid
、fbclid
和mc
标签的最佳方式不管它们出现在字符串中的位置,而不摆脱任何其他查询也在里面吗?
谢谢!