如何正确地对图像进行回退?

如何正确地对图像进行回退?

我有以下位置来处理我的资产:

location ~ \.(?:css|js|jpe?g|png) {
  root /var/static;
}

因此如果请求

www.example.com/img/file.png

file.png 将从中获取

/var/static/css/file.png

是的。但在某些情况下,我需要处理以下请求:

 www.example.com/css/file1.png

并从 img 目录中获取

 /var/static/img/file1.png

我应该如何更改我的位置?

答案1

首先,不要使用root指令来执行此操作。alias是正确的指令。root仅适用于完整的服务器块。

try_files如果文件不在第一个目录中,您可以使用if nginx 应该检查其他目录。如果不是这种情况,您必须找到可以应用正则表达式的重复模式。

好了,这时就出现了一个问题。如果我们想使用,try_files我们不能使用,alias因为一个长期存在的错误。对于您的特定用例,我们将重新使用root指令,因为否则我们无法实现它。

最后但并非最不重要,梅尔文是正确的。您应该更正文件系统。对旧链接使用正则表达式,并使用 301 将其重定向到新位置。

根据你的问题举个例子

server {
    listen 80;
    server_name _;
    root /var/www;

    location / {

        location ~* ^/[^/]*/(.*)\.(css|js|jpe?g|png)$ {
            root /var/static;
            try_files $uri /img/$1.$2 =404;
        }

    }
}

答案2

你的例子根本不正确。

location ~ \.(?css|js|jpe?g|png) {
  root /var/static;
}

并且将从 中获取请求 www.example.com/img/file.png /var/static/img/file.png

后面的问号(也不该放在那里。如果 的请求/img/file.png来自 ,那么您的网站肯定存在其他问题。/var/static/css最后,您确实应该将图像移动到正确的目录中,而不是使用正则表达式来修复命名约定的偏差。或者直接创建一个目录/var/static/media,然后就完事了。

相关内容