当前位置:首页 > 开发 > 开源软件 > 正文

怎样区别nginx中rewrite时break和last

发表于: 2015-05-28   作者:ronin47   来源:转载   浏览:
摘要: 在使用nginx配置rewrite中经常会遇到有的地方用last并不能工作,换成break就可以,其中的原理是对于根目录的理解有所区别,按我的测试结果大致是这样的。 location /    {         proxy_pass http://test; 

在使用nginx配置rewrite中经常会遇到有的地方用last并不能工作,换成break就可以,其中的原理是对于根目录的理解有所区别,按我的测试结果大致是这样的。

  1. location /   
  2. {    
  3.     proxy_pass http://test;    
  4.     alias /home/html/;    
  5.     root /home/html;    
  6.     rewrite "^/a/(.*)\.html$" /1.html last;    
  7. }  

 

在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这个标签上,再看看几个测试结果:

 

  1. location /    
  2. {    
  3.     root /home/html;    
  4. }    
  5.   
  6. location /a/   
  7. {    
  8.     proxy_pass http://test;    
  9.     rewrite "^/a/(.*)\.html$" /1.html last;    
  10. }  

 

在这段配置里,使用last访问是可以访问到东西的,不过,它出来的结果是:/home/html/1.html;可我需要的是http://test/1.html?使用break就可以了。

 

  1. location /   
  2. {    
  3.     root /home/html;   
  4. }    
  5.     
  6. location /a/   
  7. {    
  8.     proxy_pass http://test;    
  9.     rewrite "^/a/(.*)\.html$" /a/1.html last;   
  10. }  

 

在这段配置里,返回错误,因为last会重新发起请求匹配,所以造成了一个死循环,使用break就可以访问到http://test/a/1.html。
所以,使用last会对server标签重新发起请求,而break就直接使用当前的location中的数据源来访问,要视情况加以使用。一般在非根的 location中配置rewrite,都是用的break;而根的location使用last比较好,因为如果配置了fastcgi或代理访问jsp 文件的话,在根location下用break是访问不到。测试到rewrite有问题的时候,也不妨把这两者换换试试。
至于使用alias时为什么必须用last,估计是nginx本身就限定了的,怎么尝试break都不能成功。
转自:http://user.qzone.qq.com/30879223/blog/1284178451

本文地址:http://www.92csz.com/19/912.html

怎样区别nginx中rewrite时break和last

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
break和last是nginx的rewrite_module里的指令,tengine翻译的文档里对这两个的指令解释是: last 停
正则表达式匹配,其中: ~ 为区分大小写匹配 ~* 为不区分大小写匹配 !~和!~*分别为区分大小写不匹配
1. break break语句的使用场合主要是switch语句和循环结构。在循环结构中使用break语句,如果执行了
1. break break语句的使用场合主要是switch语句和循环结构。在循环结构中使用break语句,如果执行了
1. break break语句的使用场合主要是switch语句和循环结构。在循环结构中使用break语句,如果执行了
一般说来,程序进入循环体后在下次循环判断之前执行循环体里的所有语句,break和continue语句可以终
几乎所有程序语言都有break和continue语句,可见它们的重要性,即使不重要相信也是够实用的吧。但是
介于UPUPW Nginx版独创的网站目录up-rewrite.conf伪静态支持文件,Discuz添加Nginx伪静态rewrite规
ios和android没有给力的看代码的工具 有时候想赖床上看代码感觉麻烦 不如自己弄一个最简单的代码高亮
ios和android没有给力的看代码的工具 有时候想赖床上看代码感觉麻烦 不如自己弄一个最简单的代码高亮
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号