https://zhuanlan.zhihu.com/p/137042956
#默认
location / { 所有location 都不能匹配后的默认匹配
不加任何规则时, 默认是大小写敏感,前缀匹配,相当于加了~与^~
}
locaion = / { 精确匹配}
location /abc/ {
}
location /qrwx {
}
location ~ \.php(.*)$ { 匹配所有php文件 }
location ^~ /image/ { 匹配常规字符串 匹配到则中止 不是正则匹配
location ~* \.(gif|jpg|jpeg)$ { 正则匹配
location ~* /js/.*/\.js { 带目录的正则匹配}
(location =)> (location 完整路径)> (location ^~ 路径) > (location ~,~*正则顺序) >(location 部分起始位置) > (/)
= 精准匹配 内容要同表达式完全一致才匹配成功 匹配优先级最高。一旦匹配成功,则不再查找其他匹配项
^~ 带参前缀匹配 类型表达式。一旦匹配成功,则不再查找其他匹配项。
~ 正则匹配(区分大小写)
~* 正则匹配(不区分大小写)
!~ 区分大小写的匹配取非
!~* 不区分大小写的匹配取非
/xxx 普通前缀匹配,优先级低于带参数前缀匹配。
/ 任何没有匹配成功的,都会匹配这里处理
! 取反
#优先级1,精确匹配,根路径
location =/ {
location = /abc/ {
#优先级2,以某个字符串开头,以av开头的,优先匹配这里,区分大小写
location ^~ /av {
#优先级3,区分大小写的正则匹配,匹配/media*****路径
location ~ /media {
alias /data/static/;
}
#优先级4 ,不区分大小写的正则匹配,所有的****.jpg|gif|png 都走这里
location ~* .*\.(jpg|gif|png|js|css)$ {
location ~ \.(gif|jpg|png|js|css)$ { 区分大小写的正则匹配,若匹配成功,停止往下搜索正则,采用这一条
#优先7,通用匹配 最后收尾
location / {
location !~ \.xhtml$ {区分大小写,匹配不已.xhtml结尾的
location !~* \.xhtml$ {不区分大小写,匹配不已.xhtml结尾的
*:重复前面的字符0次或多次
?:重复前面的字符0次或1次
+:重复前面的字符1次或多次
.:匹配除换行符以外的任意一个字符
(a|b):匹配a或b
^:以...开头
$:以...结尾
:重复前面的字符n次
{n,}:重复前面的字符n次或更多次
{n,m}:重复前面的字符n-m次
*?:重复前面的字符0次或多次,但尽可能少重复
+?:重复前面的字符1次或多次,但尽可能少重复
??:重复前面的字符0次或1次,但尽可能少重复
{n,m}?:重复前面的字符n-m次,但尽可能少重复
?:重复前面的字符n次以上,但尽可能少重复
## 3、正则表达式补充
\W:匹配任意不是字母,数字,下划线,汉字的字符(特殊符号)
\S:匹配任意不是空白符的字符
\D:匹配任意非数字的字符
\B:匹配任意不是单词开头或结尾的位置
[a]:匹配单个字符a
[a-z]:匹配a-z小写字符的任意一个
[^a]:匹配除了a以外的任意字符
[^abc]:匹配除了abc这几个字母以外的任意字符
location /doc {
#访问 /doc 时,服务器首先去找doc文件,找不到则将doc当做目录,重定向到 /doc/,在该目录下找默认文件
proxy_pass http://www.doc123.com
}
location /doc/ {
proxy_pass http://www.doc456.com
}
location /index/ {
error_page 404 @index_error;
}
location @index_error {
.....
}
#以 /index/ 开头的请求,如果链接的状态为 404。则会匹配到 @index_error 这条规则上
#实例
location / {
index index.html index.htm;
try_files $uri $uri/ @router;
#或者
try_files $uri $uri/ /index.html;
}
location @router {
rewrite ^.*$ /index.html last;
}
location ^~ /page/list/NQWDAD/ {
rewrite ^(.*)$ / redirect;
}
# 二级下的所有目录跳转到二级目录
location ^~ /sdjnxy {
try_files $uri $uri/ /sdjnxy/index.html;
}
# 下载目录重定向到其它目录下,在二级或者三级域名下指定多个
location ^~ /bjsgjs2/api/public {
alias /data/wwws/bkgoapi/bjsgjs2-exam/public;
}