The difference between nginx rewrite without break and with break
習慣沉默
習慣沉默 2017-05-16 17:09:28
0
1
644

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

習慣沉默
習慣沉默

reply all(1)
習慣沉默

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.

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template