代码之家  ›  专栏  ›  技术社区  ›  Ben

nginx位置新位置重定向周期

  •  1
  • Ben  · 技术社区  · 6 年前

    我把网站上的一堆图片从 /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 回复  |  直到 6 年前
        1
  •  2
  •   Daniel    6 年前

    我认为你的问题是网址 /images/categories 也符合那个 /images 定位块。所以你需要匹配 /图像/类别 第一。这是一种方法。

    location ~ ^/images/categories/(.*) {
        try_files /images/categories/$1 =404;
    }
    location ~ ^/images/(.*) {
        try_files /images/$1 /images/categories/$1 =404;
    }
    
        2
  •  1
  •   Paul    6 年前

    这个 alias 这项指示也许很适合满足您的要求。

    location /images {
        alias /var/www/html/public/images/categories;
    }
    
        3
  •  1
  •   cnst    6 年前

    注意,根据 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/ 两部分是URL方案的一部分,如, /images/categories/images/myimage.png 在文件系统上?如果没有,则正确的解决方案可能是:

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