这里对这个问题有一些很好的回答:NGINX:为了缓存目的而忽略某些 URL 参数
但我似乎无法让它工作。我正在运行 wordpress 安装,这是我的映射:
map $args $cachestep1 {
default $args;
~^(fbclid=[^&]*&?)(.*)$ $2;
~^([^&]*)(&fbclid=[^&]*)(&?.*)$ $1$3;
}
我的缓存键:
fastcgi_cache_key $scheme$host$request_method$uri$cachestep1;
我仍然在具有不同 fbclid 的完全相同的 URL 上获得缓存 MISS。
答案1
看起来第三个正则表达式稍微有点错误——^([^&]*)(&fbclid=[^&]*)(&?.*)$
不会匹配像这样的字符串a=c&c=d&fbclid=trimm&xxx=yyy
。
可以替换为^(.*)(&fbclid=[^&]*)(&?.*)$
。尝试一下regex101.com。
一些小改进:
- 没有捕获组
(?:...)
.*?
- 非贪婪版本.*
(尽可能少的字符)
map $args $cachestep1 {
default $args;
~^(?:fbclid=[^&]*&?)(.*)$ $1;
~^(.*?)(?:&fbclid=[^&]*)(&?.*)$ $1$2;
}