rewrite指令的最后一项参数为flag标记,支持flag标记有:
1.last 相当于apache里面的[L]标记,表示rewrite。
2.break本条规则匹配完成后,终止匹配,不再匹配后面的规则。
3.redirect 返回302临时重定向,浏览器地址会显示跳转后的URL地址。
4.permanent 返回301永久重定向, 浏览器地址会显示跳转后的URL地址。
使用last和break实现URI重写,浏览器地址栏不变。而且两者有细微差别,使用alias指令必须用last标记;使用proxy_pass指令时,需要使用break标记。Last标记在本条rewrite规则执行完毕后,会对其所在server{......}标签重新发起请求,而break标记则在本条规则匹配完成后,终止匹配。
一般在跟location中(location /{...})或直接在server标签中编写rewrite规则,推荐使用last标记;在非根location中(location /cms/{...}),则使用break。
如果URI中含有参数(/app/test.php?id=5),默认情况下参数会被自动附加到替换串上,你可以通过在替换串的末尾加上?标记来解决这一问题。
nginx rewrite 相关例子
例如:
rewrite ^/test(.*)$ http://www.tiyee.net/home permanent;
访问http://www.tiyee.net/test?id=5 会跳转到 http://www.tiyee.net/home?id=5
例如:如果我们将类似URL /photo/123456 重定向到 /path/to/photo/12/1234/123456.png
Rewrite "/photo/([0-9]{2})([0-9]{2})([0-9]{2})" /path/to/photo/$1/$1$2/$1$2$3.png ;
其他例子:
#rewrite ^/index.php/c=test&art=(.*)$ /test/art/$1 redirect;
#rewrite ^/index.php/c=test&art=(.*) /test/art/$1 redirect;
#rewrite "^/index.php/c=([a-zA-Z]+)&([a-zA-Z]+)=([0-9]{2})" /$1/$2/$3 redirect;
注:如果正则表达式里面有花括号"{"或"}" ,应该使用双引号或单引号。
部分正则表达式可以在()内,用$1~$9来访问
nginx的rewrite规则参考:
-
A."~"符号表示区分大小写字母的匹配
-
B."~*"符号表示不区分大小写字母的匹配
-
C."!~"和"!~*"符号的作用刚好和"~"、"~*"相反,表示不匹配
-
D."-f"和"!-f"用来判断文件是否存在
-
E."-d"和"!-d"用来判断目录是否存在
-
F."-e"和"!-e"用来判断文件或目录是否存在
-
G."-x"和"!-x"用来判断文件是否为可执行
常用正则
. : 匹配除换行符以外的任意字符
? : 重复0次或1次
+ : 重复1次或更多次
* : 重复0次或更多次
\d :匹配数字
^ : 匹配字符串的开始
$ : 匹配字符串的介绍
{n} : 重复n次
{n,} : 重复n次或更多次
[c] : 匹配单个字符c
[a-z] : 匹配a-z小写字母的任意一个
小括号()之间匹配的内容,可以在后面通过$1来引用,$2表示的是前面第二个()里的内容。正则里面容易让人困惑的是\转义特殊字符。
推荐:
你分享-自主开发平台