URI - the part of URL that comes after the domain (or IP/Port) name.

URI - the part of URL that comes after the domain (or IP/Port) name. http://curbsidr.com/guests/35/services/34/locations/33

/guests/35/services/34/locations/33 is the URI

location block allows 4 optional modifiers and a string to match against the URI:

= URI exactly matches location given

~ case sensitive RegEx match

~* case insensitive RegEx match

^~ optional RegEx match (RegEx is evaluated only if a regular match did not occur)

If no modifier is present, the match is interpreted as a prefix match.

location = /guests/35 will only match

/guests/35

location ~ /guests/35 will match

/guests/35

/guests/35/services/34/locations/33

but will NOT match

/Guests/35/services/34/locations/33

location ~ /guests/35 will match

/guests/35

/guests/35/services/34/locations/33

/Guests/35/services/34/locations/33

and so on

the tricky part is the order in which multiple location blocks are evaluated.
In general the longest most specific match wins but there are exceptions:

  1. no modifier or = gives an exact match done
  2. else find the longest matching prefix
  3. the longest matching prefix has ^~ modifier done
  4. evaluate regular expressions, first match done
  5. no match, use previously stored longest matching prefix

So the order in which location block are positioned matters!

Welcome to The infinite monkey theorem

Somewhere a monkey just typed Shakespeare in TypeScript. Be the first to read the masterpieces (and the hilarious misfires) landing on the blog.

Subscribe to The infinite monkey theorem

We fling fresh posts—no banana peels attached—straight to your inbox.