location 匹配
最后更新于:2022-04-02 02:54:20
[TOC]
## root与alias区别
```
location ^~ /admin {
alias /var/www/admin/;
index regist.html;
}
location / {
root /data/html/;
index index.html index.html;
}
```
- root的处理结果是:root路径+location路径
- alias的处理结果是:使用alias路径替换location路径
- alias是一个目录别名的定义,root则是最上层目录的定义
- 重要的区别是alias后面必须要用“/”结束,而root不强制
### root与alias 后跟 "/" 的区别
```
location ^~ /dev-popularize/ {
# 必须有 dev-popularize 这个目录,静态资源文件都在这个目录下
root /Users/wxq/Desktop/shounaer/dist;
# 不需要有 dev-popularize 这个目录,静态资源文件直接放在dist目录下
root /Users/wxq/Desktop/shounaer/dist/;
# 则 dist 目录下,无论有没有dev-popularize 都不行,会报 403
alias /Users/wxq/Desktop/shounaer/dist;
# 则 dist 目录下,直接放你的静态资源文件就行
# alias /Users/wxq/Desktop/shounaer/dist/;
index regist.html;
}
```
## location 开头
语法规则: `location \[ = | ~ | ~ \* | ^~ \] /uri/ { … }`
### 以 = 开头,表示精确匹配
```
# 精确匹配,必须是127.0.0.1/
location = / {
#规则A
}
# 精确匹配,必须是127.0.0.1/login
location = /login {
#规则B
}
```
### 以 ^~ 开头,表示uri以某个常规字符串开头
nginx不对url做编码
```
## 非精确匹配,并且不区分大小写,比如127.0.0.1/static/js.
location ^~ /static/ {
#规则C
}
```
### ~ 开头,表示区分大小写的正则匹配
```
location ~ \.(gif|jpg|png|js|css)$ {
#规则D
}
```
### ~* 开头,表示不区分大小写的正则匹配
```
## 不区分大小写,匹配.png结尾的
location ~* \.png$ {
#规则E
}
```
### !~ 和!~* 分别为区分大小写不匹配及不区分大小写不匹配 的正则
```
## 区分大小写,匹配不以.xhtml结尾的
location !~ \.xhtml$ {
#规则F
}
location !~* \.xhtml$ {
#规则G
}
```
### / 通用匹配,任何请求都会匹配到
```
location / {
#规则H
}
```
## 匹配顺序
首先匹配= ;
其次匹配^~;
再其次是按文件中顺序的正则匹配;
最后是交给 / 通用匹配;
当有匹配成功时候,停止匹配,按当前匹配规则处理请求
';