nginx rewrite规则之last和break
来源:互联网 发布:导入mysql中文乱码解决 编辑:程序博客网 时间:2024/04/28 14:38
有用的配置:
1.开启rewrite_log,这样在/var/log/nginx/error.log中显示匹配的规则,便于debug,理解rewrite的过程。
rewrite_log on; access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log info;
总结:
Break 和 last 都能阻止继续执行后面的 rewrite 指令,但是 last 如果在 location 下用的话,对于重写后的 URI 会重新匹配 location ,但是 break 则不会重新匹配 location 。
所以我们再来理解last与break的区别:
last: 停止当前这个请求,并根据rewrite匹配的规则重新发起一个请求。新请求又从第一阶段开始执行…
break:相对last,break并不会重新发起一个请求,只是跳过当前的rewrite阶段,并执行本请求后续的执行阶段…
我们来看一个例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
server {
listen 80 default_server;
server_name dcshi.com;
root www;
location /break/ {
rewrite ^/break/(.*) /test/$1 break;
echo "break page";
}
location /last/ {
rewrite ^/last/(.*) /test/$1 last;
echo "last page";
}
location /test/ {
echo "test page";
}
}
请求:http://dcshi.com/break/***
输出: break page
分析:正如上面讨论所说,break是跳过当前请求的rewrite阶段,并继续执行本请求的其他阶段,很明显,对于/foo 对应的content阶段的输出为 echo “break page”; (content阶段,可以简单理解为产生数据输出的阶段,如返回静态页面内容也是在content阶段;echo指令也是运行在content阶段,一般情况下content阶段只能对应一个输出指令,如同一个location配置两个echo,最终只会有一个echo指令被执行);当然如果你把/break/里的echo 指令注释,然后再次访问/break/xx会报404,这也跟我们预期一样:虽然/break/xx被重定向到/test/xx,但是break指令不会重新开启一个新的请求继续匹配,所以nginx是不会匹配到下面的/test/这个location;在echo指令被注释的情况下,/break/ 这location里只能执行nginx默认的content指令,即尝试找/test/xx这个html页面并输出起内容,事实上,这个页面不存在,所以会报404的错误。
请求: http://dcshi.com/last/***
输出: test page
分析: last与break最大的不同是,last会重新发起一个新请求,并重新匹配location,所以对于/last,重新匹配请求以后会匹配到/test/,所以最终对应的content阶段的输出是test page;
假设你对nginx的运行阶段有一个大概的理解,对理解last与break就没有问题了。
- nginx rewrite规则之last和break
- nginx rewrite规则flag参数 break和 last
- nginx rewrite break last
- Nginx rewrite last 和break区别
- nginx中rewrite模块break和last原理详解
- nginx rewrite中last和break的区别
- nginx rewrite中last和break的区别
- nginx rewrite中last和break的区别
- nginx中rewrite模块break和last原理详解
- nginx rewrite 指令last break区别
- nginx rewrite 指令last break区别
- Nginx配置文件的rewrite功能中break和last的差别
- nginx last和break 区别
- 实例区分nginx location中rewrite的break与last
- Nginx中的rewrite指令(break,last,redirect,permanent)
- Nginx中的rewrite指令(break,last,redirect,permanent)
- nginx rewrite规则和参考
- nginx rewrite 指令和规则
- java IO流
- 1039. Phone Home
- Floyd-Warshall算法过程中矩阵计算方法—十字交叉法
- LeetCode笔记:389. Find the Difference
- 51nod 1102 面积最大的矩形
- nginx rewrite规则之last和break
- 欧盟对中国不锈钢管件采取反倾销措施 商务部回应
- 新年第二天
- Android 使用OpenCv,利用cmake
- 模块的简单建立
- Gradle 快速入门
- 【Mrpc】Demo3 基于netty的服务器和客户端。
- JUC之volatile
- Redis和Memcached的区别