教学之友,学习之友。

站长教学网

nginx伪静态重写rewrite中如何使用last和break

时间:2013-02-02 00:32来源:未知 作者:ken 点击:

在实际配置中,有的地方用last并不能工作,换成break就可以,其中的原理是对于根目录的理解有所区别,按我的测试结果大致是这样的。
 location /
     { 
          proxy_pass http://www.eduyo.com; 
          alias /home/html/; 
          root /home/html; 
          rewrite "^/a/(.*)\.html$" /1.html last; 
     }
在location / { 配置里:
1、使用root指定源:使用last和break都可以
2、使用proxy_pass指定源:使用last和break都可以
3、使用alias指定源:必须使用last
在location /a/或使用正则的location ~ ^/a/里:
1、使用root指定源:使用last和break都可以
2、使用proxy_pass指定源:使用break和last结果有所区别
3、使用alias指定源:必须使用last
其中区别主要在proxy_pass这个标签上,再看看几个测试结果: 
     location / 
     { 
          root /home/html; 
     } 
 
location /a/
     { 
          proxy_pass http://www.eduyo.com; 
          rewrite "^/a/(.*)\.html$" /1.html last; 
     }
在这段配置里,使用last访问是可以访问到东西的,不过,它出来的结果是:/home/html/1.html;可我需要的是http://www.eduyo.com/1.html?使用break就可以了。 站长教学网
     location /
 { 
          root /home/html;
 } 
 
     location /a/
     { 
          proxy_pass http://www.eduyo.com; 
          rewrite "^/a/(.*)\.html$" /a/1.html last;
 }
在这段配置里,返回错误,因为last会重新发起请求匹配,所以造成了一个死循环,使用break就可以访问到http://www.eduyo.com/a/1.html。
所 以,使用last会对server标签重新发起请求,而break就直接使用当前的location中的数据源来访问,要视情况加以使用。一般在非根的 location中配置rewrite,都是用的break;而根的location使用last比较好,因为如果配置了fastcgi或代理访问jsp 文件的话,在根location下用break是访问不到。测试到rewrite有问题的时候,也不妨把这两者换换试试。
至于使用alias时为什么必须用last,估计是nginx本身就限定了的,怎么尝试break都不能成功。

(责任编辑:ken)
TAG标签: 伪静态 nginx Rewrite
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
注册登录:不允许匿名留言,登录后留言无需输入验证码。
栏目列表
最新内容