How to edit url and pass forward to wsgi?

Francis Daly francis at
Thu Sep 3 07:44:11 UTC 2015

On Thu, Sep 03, 2015 at 12:44:09AM -0400, Thomas Nyberg wrote:

Hi there,

>     location ~ /staging/dog/.*/info/cat {

"~" means "regex match".

You haven't anchored the regex, so a request for /staging/dog/x/info/cat
will match this, but so will a request for /a/staging/dog/x/info/cat/b

> directive in place, but put the following one before it, then get
> "502 Bad Gateway":
>     location ~ /dog/.*/info/cat {

This also is matched by a request for /staging/dog/x/info/cat.

For regex locations, first match wins. So this location is chosen to
process this request.

> Nothing else was changed. The route is different, the port is
> different. Why would this affect the other one? Is it that I'm
> somehow "breaking" out and _then_ matching the other one?

No. Your request matches the first regex location, so uses the first
regex location.

Possibly you want

  location ~ ^/dog/.*/info/cat


  location ~ ^/dog/.*/info/cat$

or maybe just

  location ^~ /dog/

depending on what the full plan is.

> I.e. I want to _not_ leave the location box once I've matched.
> Is this possible?

Yes, it's what you are already doing.

You're just not in the location block you think you are in.

Francis Daly        francis at

More information about the nginx mailing list