网站首页 > 精选教程 正文
在日常使用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-23 Nginx实现IF语句里的AND,OR多重判断
- 2024-10-23 Kubernetes 标签:10 个最佳实践的专家指南
- 2024-10-23 Helm入门(一篇就够了) helm create
- 2024-10-23 解锁nginx的last,break nginx配置解析
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)