Nginx如果rewrite写了很多条,很容易发现rewrite写的没问题,可是就是匹配不了,很可能已匹配到其它rewrite中去了。打开rewrite的log,可以清晰的看到其匹配的先后顺序,和那一条匹配了。
方法:
1:在http段加入如下:
rewrite_log on;
error_log /tmp/xxxerror.log notice;
注意两点:1)在http字段加,反正我试了一下,在配置文件的开始位置,nginx会报rewrite_log 是一个不识别的变量。
2)注意 error_log的级别是notice,否则不会显示其具体的匹配过程,但需要注意,最好在测试环境下调试,error_log会增长的很快,我们网站20分钟5G多,所以在线上调试完了,尽快关闭!!!或说改成error级别的。
tail /tmp/xxxerror.log notice:
2014/04/25 13:20:12 [notice] 29125#0: *10 "^/bbs/(.*)$" does not match "/bbs", client: 192.168.1.22, server: localhost, request: "GET /bbs HTTP/1.1", host: "192.168.1.123"