我将网站上的一堆图像从/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”,引荐来源网址:
如何在此处防止无限循环?
答案 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;
}