配置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 也不存在,就死循環了。