The location block is defined within the server block.
A basic location block looks like this
location / {
root /data/www; }
}
Format
location [ = | ~ | ~* | ^~ ] uri { ... }
location @name { ... }
prefix | meaning | |
---|---|---|
= | none | forward matching |
= | exact match | |
~ | regular expression (case sensitive) | |
~* | regular expression (case insensitive) | |
^~ | regular expression is not evaluated after a match |
Note that no prefix is only a forward match.
location /foo { ... }
In the above case,
/foo = match of course
/foo/ = match
/foobar = match also
If you want to match only /foo,
location = /foo { ... }
to match only /foo, use the = equal prefix as in location = /foo { ... }
.
In the above case /foo/ will also be mismatched.
This is often seen in PHP processing
location ~ \.php$ { ... }
is the prefix of the ~
tilde, so the URL part is case-sensitive in regular expressions.
The ~
tilde prefix in the URL part is case-sensitive. is an escape to treat it as a period character itself, not as a regular expression period (any single character). . is escaped to treat it as a period character itself, not a period (an arbitrary character) as a regular expression. The $ in
php$` indicates the end of a regular expression, so it will not match, for example, phpx.
Taken together, this means that any URL ending in .php will match this location block.