Nginx 镜像文件名通过使用正则表达式修改 uri 来删除尺寸

Nginx 镜像文件名通过使用正则表达式修改 uri 来删除尺寸

在 nginx 配置中,当根据 wordpress 图像命名/大小符号约定找不到所需的图像大小时,返回原始图像的最佳方法是什么。

因此,假设未找到 /image-name-150x170.png,我希望返回 /image-name.png。-150-170 部分可以是其他数字。因此,我希望删除文件名中 1-4 位破折号 x 点之前的 1-4 位数字。

我想将 uri 代码中的替换项放在 @static_full 位置块内或重写。想知道哪个性能更好。

#some locations here and then 

location ~* ^.+\.(png|gif|jpg|jpeg){
       access_log off; 
       log_not_found off; 
       expires max; 
       error_page 404 = @static_full;  #if not found, seek #static_ful
}

location @static_full{
  #modify uri here to remove image dimensions like below
  #uri = remove dash 1-4 digits x 1-4 digits before dot
  #or rewrite to original name 
 }

location / {
  try_files $uri $uri/ /index.php?$args ;
}

更新,我知道如何做。下面做了我想做的事情。

location @static_full{
  #modify uri here to remove image dimensions like below
  #uri = remove dash three digits x three digits before dot
  rewrite "^(.*)(-[\d]{1,4}+x[\d]{1,4}+.)([\w]{3,4})" $1.$3 break;
 }

答案1

您可以考虑使用try_files而不是error_page指令。

try_files $uri @static_full;

这个文件了解详情。

编辑-添加完整的解决方案:

location ~* ^.+\.(png|gif|jpg|jpeg) {
    try_files $uri @static_full;

    access_log off; 
    log_not_found off; 
    expires max; 
}

location @static_full {
    rewrite "^(.*)(-[\d]{1,4}+x[\d]{1,4}+.)([\w]{3,4})" $1.$3 break;
}

location / {
    try_files $uri $uri/ /index.php?$args ;
}

相关内容