nginx rewrite 相关、重定向

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表示的是前面第二个()里的内容。正则里面容易让人困惑的是\转义特殊字符。




推荐: 你分享-自主开发平台


你可能感兴趣的:(nginx)