A problem found when configuring nginx rewrite
if (!-e $document_root$fastcgi_script_name) { rewrite ^.*$ /404.html break; }
This is normal, but after removing break,
if (!-e $document_root$fastcgi_script_name) { rewrite ^.*$ /404.html; }
An error was reported at this time
rewrite or internal redirection cycle while processing "/404.html
What is the difference between adding and not adding break? When not adding break, what happens after rewrite? Ask God to clarify my doubts
--------renew---------
404.html file exists
When I change break to last, the above error will still be reported, so I think that without adding break or changing break to last, when the uri matches the above rewrite, it will match the location block again. , but the values of variables ($document_root, $fastcgi_script_name...) and so on have not changed, causing the if block to be entered again, and the loop continues until more than 10 times, and then a 500 error is reported
--------Update again---------
After more testing, it was found that in the location block, if there is no break flag after rewrite or there is a last flag after rewrite, then the location block will be re-selected after rewrite. If the original location block is still entered, then the variable ($document_root, $fastcgi_script_name...) will not change, but if it is redirected to another location block after rewriting, the variables will change at this time
If you don’t add a break, it will not stop and continue to find the next rewrite rule.
Rewrite all requests to 404.html. If 404.html does not exist, it will be an infinite loop.