rewrite语法规则

rewrite规则

格式:rewrite		regex		replaceent	[flag]
1)rewrite配置可以在server 、location以及if配置段内生效
2)regex是用于匹配URI的正则表达式,其不会匹配到$host(域名)
3)replaceemt是目标跳转的URI,可以以http://或者https://开头,也可以省略$host,直接写$request_uri部分(即请求的链接)
4)flag是用来设置rewrite对URI的处理能力,其中有break、 last 、rediect 、permanent,其中break和last在前面已经介绍过。rediect和permanent的区别在于,前者为临时重定向(302),后者是永久重定向(301),对于用户通过浏览器访问,这2者的效果是一致的。但是对于搜索引擎蜘蛛爬虫来说就有区别了,使用301更有利于SEO。所以建议replacement是以http://或者https://开头的flag使用permanent。

示例1

location	/	{
		rewrite		/(.*) http://www.test.com/$1 permanent;
}
说明:.*为正则表达式,用()括起来,在后面的URI中可以调用它,第一次出现的()用$1调用,第二次出现的()用$2调用,以此类推

示例2

location	/		{
		rewrite		/.*		http://www.test.com$request_uri		permanent;
}
说明:在replacement中,支持变量,这里的$request_uri就是客户端请求的链接

示例3

server{
		listen 80;
		server_name www.123.com;
		root		/tmp/123.com;
		index	index.html;
		rewrite		/(.*)		/abc/$1	redirct;
}
说明:本例中的rewrite规则有问题,会造成连续循环,nginx有个最大50次限制,最终会失败,解决该问题有以下2个方案

方案1 
serve{
		listen 80;
		server_name www.123.com;
		root		/tmp/123.com
		index	index.html;
		rewrite		/(.*)	/abc/$1 break;
}
说明:在rewrite中使用break,会避免循环

方案2
server{
		listen 80;
		server_name www.123.com;
		root		/tmp/123.com;
		index	index.html;
		if	($request_uri	!~		'^/abc/')
		{
				rewrite 	/(.*)		/abc/$1	redirect;
		}
}
说明:加一个条件限制,也可以避免产生循环

你可能感兴趣的:(rewrite语法规则)