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;
}