nginx rewrite 不加break和加break的区别
習慣沉默
習慣沉默 2017-05-16 17:09:28
0
1
595

配置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块后,这时候变量就会改变

習慣沉默
習慣沉默

全部回复(1)
習慣沉默

不加 break 就不会停止,继续找下一个 rewrite 规则。

把所有请求 rewrite 到了 404.html,如果 404.html 也不存在,就死循环了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!