首页 » LNMP » nginx rewrite

nginx rewrite

 

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,转载请注明来源!

0