Nginx中的location规则与rewrite

nginx正则表达式

Nginx中的location规则与rewrite_第1张图片

 ^$空行

\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 ~ / {. . .}

Nginx中的location规则与rewrite_第2张图片

 location ^~ /abc { }

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

~区分大小

~*不区分大小写

!~ 区分大小写来取非

优先级

首先是精确匹配 =

其次是前缀匹配的 ^~

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

不带任何修饰的前缀匹配

最后交给/通用匹配

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

优先级总结:

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

Nginx中的location规则与rewrite_第3张图片

Nginx中的location规则与rewrite_第4张图片 

 rewrite重写

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

Nginx中的location规则与rewrite_第5张图片

 Nginx中的location规则与rewrite_第6张图片

 Nginx中的location规则与rewrite_第7张图片

 rewrite ^/(.*)$ http://www.benet.com/$1 permanent; #$1为正则匹配到的数^头,$尾Nginx中的location规则与rewrite_第8张图片跳转维护界面Nginx中的location规则与rewrite_第9张图片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;

}

Nginx中的location规则与rewrite_第10张图片

 .+会把/包含在内

Nginx中的location规则与rewrite_第11张图片

练习: 实现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;

}

你可能感兴趣的:(nginx)