How to edit url and pass forward to wsgi?

Francis Daly francis at daoine.org
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

or

  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.

http://nginx.org/r/location

	f
-- 
Francis Daly        francis at daoine.org



More information about the nginx mailing list