我有一个程序可以创建优化版本的图片,这些图片会上传到/images/
网络服务器上的文件夹中。它遍历子文件夹,并在每个子文件夹中创建一个.optimized
包含优化版本的文件夹,如果它至少比原始版本小一定大小。我的目标是检查是否存在这样的优化版本,如果存在则提供它,否则提供原始版本(在某种意义上gzip_static
,如果它存在,如何提供文件的 .gz 版本)。
我在 Apache 前面将 NGINX 作为代理运行,所以虽然我习惯于使用 htaccess 处理此类问题,但我试图在 NGINX 中本地执行它以避免服务器不得不将请求移交给 Apache。在.htaccess
,我可以做这样的事情:
RewriteCond %{REQUEST_FILENAME} ^(/images/(?:.*/)?)(.*?)$ [OR]
RewriteCond $1.optimized/$2 -f
RewriteRule .* $1/.optimized/$2 [L]
有没有直接在 NGINX 中处理这个问题的好方法?我发现的大多数类似用例都将所有缓存/优化文件保存在一个缓存文件夹中,这与我描述的结构相反。
您可以使用正则表达式
location
来提取 URI 的第一部分和第二部分。使用try_files
语句按顺序在文件系统中搜索每个文件。例如: