Apparent bug in rewrite (0.7.65)

Maxim Dounin mdounin at mdounin.ru
Mon Jan 3 07:52:01 MSK 2011


Hello!

On Sun, Jan 02, 2011 at 02:58:29PM -0500, mschipperheyn wrote:

> I have an apparent bug in nginx 0.7.65
> 
> My config
> [code]
> server {
> 	listen          80;
> 	server_name     assets.mysite.com;
> 	root            /usr/share/apache-tomcat-6.0.24/webapps/ROOT/assets;
> 	
> 	rewrite ^/([^/]+)/(.*)	/$2;
> 	expires 90d;
> }
> [/code]
> 
> My request
> [code]
> 2011/01/02 19:51:52 [error] 5824#0: *18 open()
> "/usr/share/apache-tomcat-6.0.24/webapps/ROOT/assets/style.css" failed
> (2: No such file or directory), client: xxx, server: assets.mysite.com,
> request: "GET /28/css/style.css HTTP/1.1", host: "assets.mysite.com"
> [/code]
> 
> >From this it looks like 
> http://www.mysite.com/28/css/style.css
> gets munged to 
> /style.css
> when it should be
> /css/style.css
> 
> On apache this works fine and I checked the regex on
> http://www.regexplanet.com/simple/ which suggests it's just fine.
> 
> Any suggestions?

By defining rewrite at server level and not using location / you 
actually define two rewrites: one at server level, and the same 
one in implicit location.  Or, in other words, server rewrites are 
also location-level rewrites in implicit location.

Use this instead:

server {
    ...

    location / {
        rewrite ^/([^/]+)/(.*) /$2 break;
    }
}

Just adding "location / {}" whould do the trick as well, but being 
explicit is a good idea.

Maxim Dounin



More information about the nginx mailing list