【发布时间】:2019-08-19 01:49:32
【问题描述】:
大家好,
为了动态调整图像大小,我决定使用 Kraken 或 imgix 之类的服务。
我的图片会这样显示:site.com/img/path-to-img-s250x250.jpg
我想要实现的是:如果图像path-to-img-s250x250.jpg存在,那么我会显示它,如果没有,则运行nginx重写规则来调整原始图像的大小并保存。
这是可能的还是我应该用 PHP 进行检查?
对于如何更好地处理动态调整图像大小,您还有什么更好的想法吗?
非常感谢
location /img/ {
try_files $uri @getImg @resize;
}
location @getImg{
rewrite "img/(.*)/([a-z0-9]+)-([0-9]+)x([0-9]+).([0-9]{5}).(jpg|jpeg|png|gif|ico)$" /img/$1/$2-$3x$4.$6 break;
}
location @resize{
rewrite "img/(.*)/([a-z0-9]+)-([0-9]+)x([0-9]+).([0-9]{5}).(jpg|jpeg|png|gif|ico)$" $scheme://$host/image?path=$1&file=$2&ext=$6&w=$3&h=$4 break;
}
这是图片链接:site.com/img/prods/1002/filename-200x200.12345.jpg
12345 用于版本控制
【问题讨论】:
-
try_files仅接受最后一个参数中的命名位置。您的@getImg术语被解释为文件名。您是否尝试测试两个替代文件名的存在?一个有版本号,一个没有版本号? -
其实所有图片都有版本号。不同之处在于该图像可以已经存储在硬盘中,在这种情况下,我只是将其显示为省略版本号(
@getImg)。而第二种情况是如果图片不存在,需要通过Kraken.io生成并保存……希望你能更好的理解我 -
我已经用你正在寻找的东西更新了答案。
-
哦,太棒了,快到了 :) 我遇到了
@resize的问题:rewrite "^/img/(.*)/([a-z0-9]+)-([0-9]+)x([0-9]+).([0-9]{5}).(jpg|jpeg|png|gif|ico)$" $scheme://$host/image?path=$1&file=$2&ext=$6&w=$3&h=$4 break重定向到带有所有查询字符串的 URL... :( 如果我不这样做使用$scheme://$host会返回404错误 -
您想在内部重定向到
/image处理程序,我认为它指向 PHP 脚本?根据您的脚本,您可能需要执行rewrite...last,或者您可能需要在@rewrite 块中包含所有相关的fastcgi语句。
标签: nginx mod-rewrite url-rewriting