使`try_files`重定向而不是服务

时间:2014-08-17 17:47:29

标签: nginx file-extension

我有一堆图像(95%JPEG,4.9%PNG和0.1%GIF)按顺序编号,但有时会有非均匀扩展(1.jpg,2.jpg,3.png,4。 jpg,...)。

我希望能够在没有指定扩展名的情况下请求图像并让nginx进行适当的重定向。我目前正在使用try_files,但它没有重定向:

location ~ '^/i/(\d+)/(\d+)$' {
    try_files $1/$2.jpg $1/$2.png $1/$2.gif;
}

nginx文档说使用if检查文件是否存在是不好的,但我真的不知道如何做到这一点。我该怎么办?

if file has extension:
    serve it and 404 if it doesn't exist
else:
    if   file + .jpg exists, redirect
    elif file + .png exists, redirect
    elif file + .gif exists, redirect

404 if everything else failed

1 个答案:

答案 0 :(得分:0)

这是我的解决方案:

root /some/path;

if ($uri ~ ^/(books/\d+/\d+)$) {
    set $path $1;
}

if (-f "/some/path/$path.jpg") {
    return 301 "$path.jpg";
}

if (-f "/some/path/$path.png") {
    return 301 "$path.png";
}

if (-f "/some/path/$path.gif") {
    return 301 "$path.gif";
}

它不漂亮,但它有效。