Nginx rewrite: last & break

Maxim Dounin mdounin at mdounin.ru
Thu Oct 20 16:38:31 UTC 2011


Hello!

On Fri, Oct 21, 2011 at 12:12:01AM +0800, Ryan Chan wrote:

> Hello,
> 
> According to document: http://wiki.nginx.org/HttpRewriteModule#rewrite
> 
> It said "break - completes processing of rewrite directives and
> breakes location lookup cycle by not doing any location lookup and
> internal jump at all"
> 
> However, seems my config below is an exception?
> 
> server {
>         listen 80;
> 
>         server_name .example.com
>         root /data/example/;
> 
>         if ($request_uri ~ "foo") {
>             rewrite ^/foo /bar break;
>         }
> 
>         location /bar {
>             echo "error";
>         }
> }
> 
> When I curl using:  curl http://example.com/foo
> 
> the string "error" was returned.
> 
> However, isn't the break will skip any following location block? So it
> shouldn't matche the location below, right?

Processing of rewrite directives at server level may be stopped 
via break, but the location lookup will follow anyway (as there is 
no location at this stage where request may be processed).

Note original documentation doesn't say anything about "breakes 
location lookup cycle ...".  It's looks like it was added by 
Agentzh here:

http://wiki.nginx.org/index.php?title=HttpRewriteModule&action=historysubmit&diff=7141&oldid=6736

I've reverted it as it's incorrect and obviously causes confusion.

Maxim Dounin



More information about the nginx mailing list