location 常用说明

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这几个字母以外的任意字符

URI结尾带不带/ 区别

  • URL尾部的 / 表示目录,没有 / 表示文件
  • 所以访问 /xxx/ 时,服务器会自动去该目录下找对应的默认文件
  • 如果访问 /xxx 的话,服务器会先去找 xxx 文件,找不到的话会将 xxx 当成目录,重定向到 /xxx/ ,去该目录下找默认文件
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;
    }