Nginx位置新位置重定向周期

时间:2018-07-14 15:43:19

标签: nginx

我将网站上的一堆图像从/images移到了/images/categories。我希望旧的URL仍能从旧位置提供资产而不复制它们,因为我有第三方引用这些URL。我尝试了一个location / try_files块:

location /images {
    try_files /images/categories/$uri $uri;
}

问题是我得到了:

  

重写或内部重定向周期,同时内部重定向到“ /images/categories/myimage.png”,客户端:172.27.0.1,服务器:app,请求:“ GET /images/categories/myimage.png HTTP / 1.1”,主机:“ localhost”,引荐来源网址:

如何在此处防止无限循环?

3 个答案:

答案 0 :(得分:2)

我认为您的问题是/images/categories中的网址也与该/images位置块匹配。因此,您需要首先匹配/images/categories。这是一种方法。

location ~ ^/images/categories/(.*) {
    try_files /images/categories/$1 =404;
}
location ~ ^/images/(.*) {
    try_files /images/$1 /images/categories/$1 =404;
}

答案 1 :(得分:1)

alias指令可能非常适合满足您的要求。

location /images {
    alias /var/www/html/public/images/categories;
}

答案 2 :(得分:1)

请注意,根据http://nginx.org/r/try_files,最终参数实际上不被视为file,而是被视为uri,从而导致nginx内部发生内部重定向,从而导致无限循环报告时的状态。

正如已经指出的,正确的方法可能是使用http://nginx.org/r/alias;否则,您可能希望使用try_files规范尾随=code,以确保不会发生重定向周期。


即,这将消除internal redirection cycle错误:

location /images {
    try_files /images/categories/$uri $uri =410;
}

但是,您是否真的像文件系统中的/images/一样,将/images/categories/images/myimage.png部分作为URL方案的一部分?如果没有,那么正确的解决方案可能是:

location /images/ {
    alias /var/www/html/public/images/categories/;
}
location /images/categories/ {
    root /var/www/html/public;
}