找不到Nginx图像回退

时间:2019-02-26 16:04:12

标签: nginx replace http-status-code-404 fallback

我的网站上有很多图像/image/test/manyfile.jpg,现在我有/image/test/manyfile_large.jpg,但并非所有.jpg都有_large.jpg。

所以我的想法是使用Nginx检查manyfile_large.jpg文件,如果不存在则重写或重定向到manyfile.jpg

任何人都可以提供示例配置吗?

非常感谢! :)

1 个答案:

答案 0 :(得分:0)

您可以使用try_files测试一个或多个文件的存在。有关详细信息,请参见this document

首先,您需要捕获URI的组件,以便可以构造两个文件名变体来尝试。

我不确定您的问题和注释中的示例是URI还是路径名。在下面的示例中,URI为/image/foo/bar.jpg,相应的文件位于/path/to/image/foo/bar.jpg和(可选)/path/to/image/foo/bar_large.jpg

例如:

location ~ ^(/image/.+)\.(jpg|png|svg)$ {
    root /path/to;

    try_files $1_large.$2 $1.$2 =404;
}

如果存在,则该块将返回较大的变体,如果存在则返回常规变体,如果不存在则返回404状态。

正则表达式location块的顺序很重要,因为具有匹配正则表达式的第一个块用于处理请求。有关详细信息,请参见this document