preventing rewrite loops with "index"

Dennis J. dennisml at
Fri Jan 22 17:06:47 MSK 2010

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?


More information about the nginx mailing list