网站首页 > 技术教程 正文
在日常使用Nginx时会用到rewrite指令;这个指令中的最后一个参数,有下面4个可选值
last
break
redirect
permanent
"redirect(临时重定向 302)"和"permanent(永久重定向 301)" 这两项比较容易理解,但是last和break经常搞混
我们通过实际的操作体验后,就会清晰明白
在Nginx中增加如下的配置
```
# 配置一
location /cms/ {
rewrite "^/cms/a/(.*)" /cms/continue/info last;
rewrite "^/cms/b/(.*)" /cms/continue/info break;
}
location /cms/continue {
return 200 "<html><body>cms continue</body></html>";
}
location /cms/continue/info {
return 200 "<html><body>cms continue info</body></html>";
}
location / {
return 200 "<html><body>Are you ok?</body></html>"
}
```
上面配置表示如果用户请求的url是以 /cms/a 或/cms/b头的都将被rewrite到 /cms/continue/info 这个URL上;只是最后的参数一个是last,另一个是break;
那么有什么不同吗?我们结合实际访问效果来看看
last 验证
当我们在浏览器上使用 /cms/a/1 访问时,可以看到浏览器展示的是“cms continue info”,这表示nginx在完成
rewrite "^/cms/a/(.*)" /cms/continue/info last;
这条rewrite指令后,继续去Servce区块中去匹配locaiton,且也匹配到了"/cms/continue/info" 这条最长的location 匹配
进一步验证,我们将 location /cms/continue/info 删除,修改后的配置如下
# 配置二
location /cms/ {
rewrite "^/cms/a/(.*)" /cms/continue/info last;
rewrite "^/cms/b/(.*)" /cms/continue/info break;
}
location /cms/continue {
return 200 "<html><body>cms continue</body></html>";
}
location / {
return 200 "<html><body>Are you ok?</body></html>"
}
我们再在浏览器上使用 /cms/a/1 访问时,可以看到浏览器展示的是“cms continue ”
再进一步验证,如果我将 /cms/continue 也删除,会发生什么?
修改后的配置如下
# 配置三
location /cms/ {
rewrite "^/cms/a/(.*)" /cms/continue/info last;
rewrite "^/cms/b/(.*)" /cms/continue/info break;
}
location / {
return 200 "<html><body>Are you ok?</body></html>"
}
这个时候会发现浏览器上使用 /cms/a/1 访问时,浏览器显示的是 404 Not Found
last总结
经过上面的实验,我们可以得出以下结论
- last会将用户请求重写后,再次进入处理阶段(再次在Server中查找locaion匹配)
- 如果找到有与重写后的url相匹配的则采用(如配置一、配置二)
- 如果没有找到则不返回404,那怕配置中有一个 "location /"的默认规则(如配置三)
break 验证
我们仍然采用配置一
# 配置一
location /cms/ {
rewrite "^/cms/a/(.*)" /cms/continue/info last;
rewrite "^/cms/b/(.*)" /cms/continue/info break;
}
location /cms/continue {
return 200 "<html><body>cms continue</body></html>";
}
location /cms/continue/info {
return 200 "<html><body>cms continue info</body></html>";
}
location / {
return 200 "<html><body>Are you ok?</body></html>"
}
当我们在浏览器上使用 /cms/b1 访问时,浏览器返回的是 404 Not Found
break结论
所以我们可以得出结论 break 会终止匹配,即不会再匹配后面的规则,也不会再次去查找locaiton匹配
猜你喜欢
- 2024-10-11 Nginx 的入门-中篇(nginx1)
- 2024-09-19 原创:NGINX/动静分离/LB/rewrite–第一部分(LAMP)(关注)
- 2024-09-19 Nginx学习笔记(10) rewrite模块中的rewrite指令
你 发表评论:
欢迎- 最近发表
-
- Linux新手必看:几种方法帮你查看CPU核心数量
- linux基础命令之lscpu命令(linux中ls命令的用法)
- Linux lscpu 命令使用详解(linux常用ls命令)
- 如何查询 Linux 中 CPU 的数量?这几个命令要知道!
- 在linux上怎么查看cpu信息(linux如何查看cpu信息)
- 查看 CPU 的命令和磁盘 IO 的命令
- 如何在CentOS7上改变网卡名(centos怎么改网卡名字)
- 网工必备Linux网络管理命令(网工必备linux网络管理命令是什么)
- Linux 网络命令知多少(linux 网络 命令)
- Linux通过命令行连接wifi的方式(linux命令行连接无线网)
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)