preventing rewrite loops with "index"

Igor Sysoev igor at sysoev.ru
Fri Jan 22 18:01:27 MSK 2010


On Fri, Jan 22, 2010 at 03:06:47PM +0100, Dennis J. wrote:

> Hi,
> So with my first rewrite issue solved I now move closer towards the real 
> configuration and run into a problem with the index directive.
> 
> My location looks like this:
> 
> location ~* ^/(([A-Za-z])([A-Za-z0-9])([A-Za-z0-9])[^/]*)(/.*)?$ {
>      root /web;
>      set $site_path /users/$2/$3/$4/$1/htdocs;
>      set $real_uri $5;
>      rewrite .* $site_path$real_uri break;
> }
> 
> When I request "/test/index.html" the location matches and gets properly 
> rewritten into a hashed form "/users/t/e/s/test/index.html". Then the root 
> get prefixed resulting in the path "/web/users/t/e/s/test/index.html" which 
> get correctly delivered by nginx. So far so good.
> 
> The problem happens when I request "/test/" instead which should deliver 
> the same index.html through the index directive. That doesn't happen though.
> 
> Looking at the log what seems to happen is that nginx sees that 
> "/web/users/t/e/s/test/" is a directory and issues a new request with the 
> uri "/web/users/t/e/s/test/index.html". This however matches the above 
> location again resulting in another rewrite that ends with a completely 
> broken path and a 404.
> 
> How can I get that the correct index processing for the first correctly 
> rewritten path without triggering another round of location processing 
> messing things up?

 location ~* ^/(([A-Za-z])([A-Za-z0-9])([A-Za-z0-9])[^/]*)(/.*)?$ {
     alias  /web/users/$2/$3/$4/$1/htdocs$5;
 }


-- 
Igor Sysoev
http://sysoev.ru/en/



More information about the nginx mailing list