配置nginx rewrite时发现的一个问题
if (!-e $document_root$fastcgi_script_name) {
rewrite ^.*$ /404.html break;
}
这时候是正常的,但是去掉break后,
if (!-e $document_root$fastcgi_script_name) {
rewrite ^.*$ /404.html;
}
这时候就报错了
rewrite or internal redirection cycle while processing "/404.html
请问加和不加break有什么区别,不加break时,rewrite之后又发生了什么?求大神解惑
--------更新---------
404.html文件是存在的
当我把break改成last的时候,依然会报上面的错误,所以我认为,不加break或者将break换成last,当uri匹配到上述的rewrite后,就会重新去匹配 location块,但是变量($document_root , $fastcgi_script_name ...)值等等都没有变化,导致再次进入if块,如此循环下去直至超过10次,然后报500错误
--------再更新---------
经过更多的测试后发现,在location块里面,如果rewrite之后不加break flag或者rewrite 之后有last flag,那么rewrite之后会重新选择location块,如果仍然进入原先所在的location块,那么变量($document_root , $fastcgi_script_name ...)是不会变化的,但是如果rewrite之后重定向到别的location块后,这时候变量就会改变
不加 break 就不会停止,继续找下一个 rewrite 规则。
把所有请求 rewrite 到了 404.html,如果 404.html 也不存在,就死循环了。