> 文章列表 > Nginx中的location规则与rewrite

Nginx中的location规则与rewrite

Nginx中的location规则与rewrite

nginx正则表达式

 ^$空行

\\d数字  \\D代表非数字 \\s 匹配空白符   \\S 非空白字符 \\w匹配任意单词符包括下划线[A-Za-z0-9_]

{n} 匹配起那面字符n次

.* 除换行符\\n匹配任意字符多次

{n,m}匹配前面字符5到10次

[abc] 匹配一次a,b,c

( )表达式的开始和结束

| 或运算符 (abc|123)匹配abc或123

rewrite和location 都能实现跳转

location对访问的路径做访问控制或代理转发(直接根据路径进行跳转)

rewrite对访问路径或域名在同一域名内url地址,重写再跳转

location匹配的三大类

精准匹配 location = / {. . . }

一般匹配location / {. . .}

正则匹配location ~ / {. . .}

 location ^~ /abc { }

如过匹配成功则不再匹配其他的location

~区分大小

~*不区分大小写

!~ 区分大小写来取非

优先级

首先是精确匹配 =

其次是前缀匹配的 ^~

按文件中的顺序的正则匹配 ~或~*

不带任何修饰的前缀匹配

最后交给/通用匹配

匹配location最长的,同长桉顺序匹配

优先级总结:

(location = 完整路径) > (location ^~前缀路径) > (location 部分起始路径) > (location /)

 

 rewrite重写

rewrite只能放在server{},location{},if{}中,并默认只能对域名后边的出去传递参数外的字符串起作用

 

 

 rewrite ^/(.*)$ http://www.benet.com/$1 permanent; #$1为正则匹配到的数^头,$尾跳转维护界面set $rewrite true

if ($remote_addr = '192.168.232.17'){

   set $rewrite false;

}

if (r$rewrite = true) {

  rewrite (.+) /weihu.html;

}

location = /weihu.html {

root /var/www/abc;

}

 .+会把/包含在内

练习: 实现accp/100-100-100.html跳转至http://www.accp.com

法一(用location跳转写)

location ~  /100-(100|200)-\\d+.html$ {

  rewrite (.+) http://www.accp.com permanent;

}

法二(用if条件判断写)

 if ($request_uri ~ ^/100-(100|200)-(\\d+).html$) {

  rewrite (.+) http://www.accp.com permanent;

}

麦克风网站