Apparent bug in rewrite (0.7.65)

Hi,

I have an apparent bug in nginx 0.7.65

My config

server {
  listen          80;
  server_name     assets.mysite.com;
  root            /usr/share/apache-tomcat-6.0.24/webapps/ROOT/assets;

  rewrite ^/([^/]+)/(.*)  /$2;
  expires 90d;
}

My request

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"

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
RegexPlanet: online regular expression testing for Java which suggests it’s just fine.

Any suggestions?

Kind regards,

Marc

Posted at Nginx Forum:

I solved it with this regex

rewrite ^/[^/]+(/.*)  /$1

Posted at Nginx Forum:

Hello!

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

expires 90d;

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 D.