这个问题是重写break和last的延伸。 从我所了解的break语句将停止处理当前的重写语句集,而不是触发新的位置search,它将继续处理当前位置块中的其余语句。 如果是这种情况,在rewrite指令中给出的replaceurl的目的是什么。
如果find匹配的重写规则,则使用指定的规则组合新的URI。
使用break关键字nginx使用重写所在的位置块中的新URI。
所以如果在当前location没有其他的东西,nginx会尝试使用一个新的URI来提供一个文件。 如果你有一个proxy_pass或类似的东西,那么它会转发一个新的URI的请求。
如果指定了last关键字,那么在创build一个新的URI之后,nginx会“重新启动”请求处理过程,并触发一个新的location块search,而不是新的URI。
last和break在nginx文档中有很好的logging:
上次停止处理当前的ngx_http_rewrite_module指令集,并开始search与更改的URI匹配的新位置;
break和stop指令一样,停止处理当前的ngx_http_rewrite_module指令集;
如果重写规则出现在服务器块中,那么似乎last和break没有区别。