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

前文

如果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状态码并输出字符串

流程

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

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

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

场景2

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

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

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

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

注意事项

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

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

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

总结 

到此这篇关于nginx中return和rewrite指令同时存在先执行顺序哪个的文章就介绍到这了,更多相关nginx中return和rewrite指令执行顺序内容请搜索恩蓝小号以前的文章或继续浏览下面的相关文章希望大家以后多多支持恩蓝小号!

原创文章,作者:QHBSJ,如若转载,请注明出处:http://www.wangzhanshi.com/n/1001.html

(0)
QHBSJ的头像QHBSJ
上一篇 2024年12月17日 18:00:10
下一篇 2024年12月17日 18:00:13

相关推荐

发表回复

登录后才能评论