Nginx 重写,从文件名中删除图像尺寸

Nginx 重写,从文件名中删除图像尺寸

例如,如果对图像发出如下请求...

/static/images/00f37ac6291bb6e8_150.jpeg

但是 150px 缩略图版本尚未生成并返回 404,我想让它尝试始终可用的全尺寸基础图像......

/static/images/00f37ac6291bb6e8.jpeg

我怎样才能让 nginx 做到这一点?

这是我已经开始做的,但我在弄清楚正则表达式时遇到了问题。我也不知道这是否是实现此目的的最佳方法。

    location /static/ {
        resolver 8.8.8.8;
        try_files $uri @redirect;
        proxy_pass https://s3.amazonaws.com/<buckets>$request_uri;
    }

    location @redirect {
        rewrite ^(.*)(?=_)(\.*)$ https://s3.amazonaws.com/<buckets>$1;
    }

这也是我使用该正则表达式进行正则表达式的结果...我不知道如何获取文件扩展名。

正则表达式 attemp1

更新:

这就是我最终做的,而且效果很好!

location /static/images/ {
    resolver 8.8.8.8;
    proxy_intercept_errors on;
    proxy_pass https://s3.amazonaws.com/my-bucket$request_uri;
    error_page 400 401 402 403 404 @redirect;
}

location @redirect {
    rewrite ^(.*)\/(.*)(_)[0,1](.*)\.(.+)$ https://s3.amazonaws.com/my-bucket/images/$2.$5;
}

答案1

我去了regex101.com进行测试,此正则表达式^(.*)\/(.*)(_)[0,1](.*)\.(.+)$与字符串匹配/static/images/00f37ac6291bb6e8_150.jpeg。通过此匹配,$1/$2.$5 将成为更大图像的路径。

相关内容