flag可以是以下的值:
last
– url重写后,马上发起一个新的请求,再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏url不变。表示完成rewrite。
break
– url重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变。停止执行当前虚拟主机的后续rewrite指令集
redirect
– 返回302临时重定向,url会跳转,爬虫不会更新url。
permanent
– 返回301永久重定向。url会跳转。爬虫会更新url。
为空
– URL 不会变,但是内容已经变化,也是永久性的重定向。last一般写在server和if中,而break一般使用在location中
last – 基本上都用这个Flag, 表示完成rewrite
break – 中止Rewirte,不在继续匹配
redirect – 返回临时重定向的HTTP状态302
permanent – 返回永久重定向的HTTP状态301
注:last和break最大的不同在于
– break是终止当前location的rewrite检测,而且不再进行location匹配 – last是终止当前location的rewrite检测,但会继续重试location匹配并处理区块中的rewrite规则;last一般写在server和if中,而break一般使用在location中
last不终止_重写后_的url匹配,即新的url会再从server走一遍匹配流程,而break终止重写后的匹配
break和last都能组织继续执行后面的rewrite指令
常用正则
.
: 匹配除换行符以外的任意字符?
: 重复0次或1次+
: 重复1次或更多次*
: 重复0次或更多次\d
:匹配数字^
: 匹配字符串的开始$
: 匹配字符串的介绍{n}
: 重复n次{n,}
: 重复n次或更多次[c]
: 匹配单个字符c[a-z]
: 匹配a-z小写字母的任意一个
小括号()
之间匹配的内容,可以在后面通过$1
来引用,$2
表示的是前面第二个()
里的内容。正则里面容易让人困惑的是\
转义特殊字符。
以下两条规则可以写成一条
rewrite ^/cbf/(.*)\/(.*)/(.*)$ /123.php?mhd=$1&siteid=$2&$3 permanent;
rewrite ^/cbf/(.*)\/(.*)?(.*)$ /123.php?mhd=$1&siteid=$2&$3 permanent;
一条是:
rewrite ^/cb/(.*)\/(.*)[/-?](.*)$ /123?mhd=$1&siteid=$2&$3 permanent;
以上的规则针对以下三个域名都会跳转,可以用curl -I来查看跳转之后的结果:
http://abc.com/cb/M193/24?fdsfs
http://abc.com/cb/M193/24/fdsfs
http://abc.com/cb/M193/24/?fdsfs
可以参考:http://www.tiyee.net/post/122 有很多案例,
nginx url rewrite的问号规则:http://blog.csdn.net/remotesupport/article/details/7950504
http://seanlook.com/2015/05/17/nginx-location-rewrite/
原文链接:nginx rewrite,转载请注明来源!