作者回复: 不是的,要看server_rewrite中是不是有指令导致不向下执行。比如,server{ if (...) {return 302 xxx;} }这样rewrite阶段的指令就没机会执行了。
if不存在是否冲突的概念,第6部分有一课是讲if的,它实际会以最后一次if结果(连续if命中时)作为后续处理的location配置。
作者回复: 我用你贴出来的配置尝试了下,发现功能是正常的,我估计是你没贴出来的配置出问题了。你把完整的nginx.conf发我邮箱看看:russelltao@foxmail.com。
对了,我是在后面直接用的return 200 '$arg_consistent';
作者回复: rewrite模块提供的if指令规则相对比较复杂,所以如果对规则了解不深,比较容易犯错。
作者回复: 你要把testlink正常工作的URL给我,以及希望nginx正常工作的URL给我,我才好给你转换关系啊。你看一下第89课就清楚了。
作者回复: 嗯,第6部分我会拿个例子讲.其实你对照第三部分里所讲的11个阶段,也能分析出if指令如果与其他模块的值指令混用时,由于值指令所属模块在不同阶段,或者在过滤模块中,比如add_header,那么结果通常与我们理解的编程语言中的if就完全不同了
作者回复: 这一节课应该提下的,谢谢提醒,准备放在第6部分讲源码时讲一下脚本式指令再提这个事。问题的出现,是因为nginx的分阶段执行以及脚本式指令统一在rewrite阶段执行的原因。我们常用的if {rewrite}和if {return}都是没问题的,这些都是rewrite阶段的脚本式指令。