NGINX:忽略 FastCGI 缓存目的的 fbclid 参数

NGINX:忽略 FastCGI 缓存目的的 fbclid 参数

这里对这个问题有一些很好的回答: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;
}

相关内容