Hello!
On Sat, Oct 22, 2011 at 02:04:21PM +0300, Nginx U. wrote:
On 22 October 2011 06:30, Ryan C. [email protected] wrote:
Anyone would like to do a quick summary for the issue?
Minaev’s answer in the serverfault link you provided is the clearest
explanation I have seen to date of this.
To paraphrase, he says, within a location block, when you use “last”
the rewrites are stopped and a new subrequest is generated which will
Just a side note: “subrequest” is incorrect term here.
take all all locations into account. When you use “break” the rewrites
are stopped and processing continued within the location you are in.
Adding Maxim’s statement above into account, outside a location block,
“break” behaves just like “last” does since there are no location
directives to run here.
Someone just needs to update the docs if this is correct.
Reading rewrite module docs carefully enough will tell basically
the same:
…
If the URI changed as a result of the execution of directives
inside location, then location is again determined for the new
URI. This cycle can be repeated up to 10 times, after which Nginx
returns a 500 error.
…
…
Example:
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last;
return 403;
But if we place these directives in location /download/, then it
is necessary to replace flag “last” by “break”, otherwise Nginx
will hit the 10 cycle limit and return error 500:
location /download/ {
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break;
return 403;
}
…
The translation though looks awful and needs re-translation;
additionally, it was already polluted with user comments, and this
doesn’t improve readability either.
Maxim D.