nginx rewrite规则last与break的区别

目录

一、break和last的描述:

二、break和last的区别:

三、break和last的举例:

四、总结


一、break和last的描述:


break和last都能阻止继续执行后面的rewrite指令,last如果在location下的话,对于重写后的URI会重新匹配location,而break不会重新匹配location。

二、break和last的区别:


last:停止当前这个请求,并根据rewrite匹配的规则重新发起一个请求。新请求又从第一阶段开始执行…
break:相对last,break并不会重新发起一个请求,只是跳过当前的rewrite阶段,并执行本请求location后续的执行阶段…

例子(在nginx的nginx目录下面创建一个test.conf,ip为192.168.1.210):

server {
    listen 80;
    server_name www.baidu.com;
    root /user/local/nginx/html;

    location /break/ {
        rewrite ^/break/(.*) /test/$1 break;
    } 

    location /last/ {
        rewrite ^/last/(.*) /test/$1 last;
        echo "last page";
    }  

    location /test/ {
        echo "test page";
    }
}

 

三、break和last的举例:

实验一:

浏览器地址输入:192.168.1.210:80/break/***
结果:404页面
分析:break是跳过当前请求的rewrite阶段,并继续执行本请求的其他阶段,/break/ 这location里只能执行nginx默认的内容指令,即尝试找/test/xx这个html页面并输出起内容,事实上,这个页面不存在,所以会报404的错误

实验二:

浏览器地址输入:192.168.1.210:80/last/***
结果:test page
分析:last与break最大的不同是,last会重新发起一个新请求,并重新匹配location,所以对于/last,重新匹配请求以后会匹配到/test/,所以最终对应的content阶段的输出是test page;

四、总结

location / {
    if (!-e $request_filename){
        rewrite ^/(.*)$ /index.php/$1 last;
    }
}    

假如我网站名为www.baidu.com,访问www.baidu.com相当于访问www.baidu.com/index.php,如果访问的为www.baidu.com/test,

后面跟last,重写后的URI会重新匹配location,相当于是访问了www.doubi.com/index.php/test,
如果后面是break,并不会重新发起一个请求,请求上述URI会出现404找不到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值