rewite在server块下,会优先执行rewrite部分,然后才会去匹配location块
server中的rewrite break和last没什么区别,都会去匹配location,所以没必要用last再发起新的请求,可以留空
location中的rewirte:
不写last和break,那么流程就是依次执行这些rewrite
1、rewrite *** break:url重写后,直接使用当前资源,不再执行location里余下的语句,完成本次请求,地址栏url不变
2、rewrite *** last:url重写后,马上发起一个新的请求,再次进入server块,重试location匹配,超过10次匹配不到报500错误,地址栏url不变
3、rewrite *** redirect:返回302临时重定向,地址栏显示重定向后的url,爬虫不会更新url(因为是临时)
4、rewrite *** permanent:返回301永久重定向, 地址栏显示重定向后的url,爬虫更新url
若在last或break需要rewrite的url加入了http,nginx不明白这时的主域名为本站或其它,所以地址栏url会被强制改变,显示重定向后的url
所以不想地址栏改变,只能使用当前域名为默认主域名,即跳转的url从“/”开始
上文所说的,可以通过下面demo理解:
1、rewrite带http:的url,地址栏url会改变,重定向后的url
location ~* /a/lists/ {
rewrite ^/a/lists/(.*)/(.*)$ http:www/daxiao.show/index.php?m=content&c=index&a=lists_second&catids=$1&name=$2 last;
}
2、rewrite的url以“/”开头,表示继续rewrite到当前域名下,地址栏url不变
location ~* /a/lists/ {
rewrite ^/a/lists/(.*)/(.*)$ /index.php?m=content&c=index&a=lists_second&catids=$1&name=$2 last;
}