Nginx 在根目录中查找图片的位置

Nginx 在根目录中查找图片的位置

我从一个客户那里继承了一个网络项目,该客户将一堆图像和 PDF 文件放在其网站的根目录中,以便他们可以轻松地将这些图像/文件的链接发送给他们的客户。

将网站移至新服务器,因此之前设置的链接仍需工作,但我希望稍微清理一下。根目录中有数百个这样的文件松散地存在。

理想情况下,我希望将所有松散的图像/文件移动到一个目录(暂时称之为“东西”),然后编写一个 Nginx 指令进行重定向。

像这样:

location = / {
    location ~* \.(gif|jpg|jpeg|pdf)$ {
        rewrite ^(.*) https://example.com/stuff/$1 last;
    }
}

但显然 Nginx 不允许在完全匹配块内嵌套位置块。

是否可以仅在根目录中找到某些文件类型(通过扩展名)?

如果这很明显,请原谅我。这有点超出我的能力范围。任何帮助都将不胜感激。

答案1

您的两个位置块直接冲突。location = /仅匹配对https://www.example.com/URL 的请求,不匹配其他任何请求。这意味着与嵌套location指令匹配的请求永远不会进入该块。

但是,下面的方法应该可行:

location ~* ^/[^/]+\.(?:gif|jpg|jpeg|pdf)$ {
    root /var/www/stuff;
    try_files $uri =404;
}

这里不需要嵌套位置。

这个配置的意思是,对于根目录中具有特定扩展名的文件,我们将为该文件提供服务的根目录设置为/var/www/stuff,然后尝试使用 发送该文件try_files。如果找不到文件,则发送 404 错误。

?:则表达式中的匹配是可选的,它只是一个轻微的优化,告诉 nginx 不要将括号内的值捕获到局部变量中。

相关内容