nginx中return和rewrite指令同时存在,先执行顺序哪个?

本文详细探讨了Nginx配置中rewrite和return指令的执行流程。在场景示例中,当访问/images时,经过rewrite重定向到/pic,再由/pic重定向到/photos。若在/pic段加入break标志,将不会执行return200in/pic,而是继续查找并执行返回200状态码的指令。总结了直接访问路径与return指令的优先级关系,强调了return指令在处理路径重定向时的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前文

如果return指令rewrite指令同时存在先执行哪个呢?

场景示例

模拟数据
server {
    location /images {
        rewrite /images/(.*)$ /pic/$1 last;  
        return 200 "return 200 in /images";
    }
    
    location /pic {
         rewrite /pic/(.*) /photos/$1;
         return 200 "return 200 in /pic";
    }
    
    location /photos {
        return 200 "return 200 in /photos";
        
    }
}

分别在/images/pic/photos的location段增加return 返回200状态码并输出字符串

流程
  1. 访问xxx.com/images/index.html ,会进入/images的location段中
  2. /images中,进行rewrite指令,将images/index.html重写到/pic/的index.html,并且有last 值
  3. 遇到last值,会重新触发请求。在server段/pic的location段。
  4. 匹配到location的/pic后 ,又重写,将/pic的index.html重定向到/photos目录下的index.html。(注意/pic段没有加last值,意味着流程顺序执行!
  5. 没有加flag标签。所以/pic段中依然执行下面的命令,会走retrun 200 "return 200 in /pic" 之后就中断。

![1.jpg][1]

![2.jpg][2]

场景2

如果在/pic段中增加flag的break,会执行什么?

![3.jpg][3]

当遇到break,会重写找/photos段,不会执行return 200 in /pic

![4.jpg][4]


注意事项

如果当你直接访问xxx.com/photos/index.html, 但是又有return指令会优先执行return指令 , 并不会返回photos/index.html的页面,直接返回return结果给你。

如果没有return指令才会找目录对应下的有没有index.html文件。

![5.jpg][5]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值