今天在调试一个其他问题时碰巧发现了一个奇怪的情况:根据我的 RewriteRule ,明明应该被 rewrite 到静态 HTML 缓存的请求,却在返回的 HTTP 头里看到了 PHP !这个 rewrite 规则应该是经过测试的,怎么突然就失效了?
第一怀疑对象是自己手贱。毕竟是个人 VPS 上的 Apache 配置,也没有使用版本控制之类的,不能确定是不是改过什么。就排查了一下。结果发现 RewriteLogLevel
这个配置竟然无效了?一查才发现,原来 Apache 2.4 里把 rewrite 日志合并到了 error 中,只需要在错误日志里加上 rewrite:traceN
就行了(其中 N 是错误级别,4足够,8应该是最详细的)。盯着错误日志看了半天,发现一个“有趣”的现象——明明已经正确匹配、 rewrite 到了静态文件,却又接着发起了 sub request ,请求了 index.php ?!
为了更好说明问题,我把我的配置简化了一下,大概是这样: