gpt4 book ai didi

regex - 如何在 Varnish 中保留特定的查询参数

转载 作者:行者123 更新时间:2023-12-03 17:45:06 25 4
gpt4 key购买 nike

我的问题可能有点奇怪。通常你想从 url 中剥离特定的查询参数以缓存在 Varnish 中。但我想做相反的事情。这是使用某些查询参数(如 utm_source 等)重定向所必需的

我有一组不需要剥离的查询参数,其余的可以剥离。

最佳答案

经过一段时间的反复试验,我找到了一种方法。

首先,我们在 sub vcl_recv 中使用此代码去除任何营销查询参数以清理 URL:

# Store original url in temporary header
set req.http.X-Original-Url = req.url;

# Strip all marketing get parameters
if(req.url ~ "(\?|&)(gclid|cx|ie|cof|siteurl|zanpid|origin|utm_[a-z]+|mr:[A-z]+)=") {
set req.url = regsuball(req.url, "(gclid|cx|ie|cof|siteurl|zanpid|origin|utm_[a-z]+|mr:[A-z]+)=[%.-_A-z0-9]+&?", "");
}
set req.url = regsub(req.url, "(\?&|\?|&)$", "");

接下来在 sub vcl_fetch 中,我们使用此代码在重定向后重新附加营销查询参数,但去除所有其他查询参数。

if (beresp.status == 301 || beresp.status == 302) {
set beresp.http.location = beresp.http.location + "?" + regsub(req.http.X-Original-Url, ".*\?(.*)", "\1");
set beresp.http.location = regsuball(beresp.http.location, "([&|?](?!gclid|cx|ie|cof|siteurl|zanpid|origin|utm_[a-z]+|mr:[A-z]+)[\w\d]+=([%.-_A-z0-9]+)?)", ""); # Comment or remove this line to keep the original query parameters after redirect
set beresp.http.location = regsub(beresp.http.location, "(\?&|\?|&)$", "");
return (hit_for_pass);
}

我还制作了一个快速启用/禁用变体,因此人们可以启用/禁用所有非营销查询参数的剥离。查看sub vcl_fetch代码中的注释

关于regex - 如何在 Varnish 中保留特定的查询参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31879405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com