[注意] Ap 2.2.x 中Rewrite里的SCRIPT_FILENAME 不正确

[注意] Ap 2.2.x 中Rewrite里的SCRIPT_FILENAME 不正确

实测环境 Apache 2.2.3, 在一个虚拟主机域里设定 Rewrite 规则, 规则大概如下

<VirtualHost ...>
  ...
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME}   !-f
  RewriteRule .*                                         /404.php
</VirtualHost>

这样一个简单的规则, 很明显我是想把访问不存在的文件的URL定向到期404.php , 而实际上 apche 在处理这段的时候
%{REQUEST_FILENAME} 的值竟然不包含 DOCUMENT_ROOT, 而只有类似 REQUEST_URI 那个部分.

即我处理: http://myhost.net/path/to/test.txt  时 SCRIPT_FILENAME 的值经过重定向显示为 /path/to/test.txt
显然这是不正确的, 导致了不该转到 404的也全转到404.php 了...

把这段 rewrite 代码移到document_Root下建立的 .htaccess ,则正确无误.

莫非是个BUG,还是历来如此处理呢,
这样子吧,你把rewritelog打开看看,解析过程是如何的,以免误杀。
我测试了,结果也跟楼住一样,我还纳闷了,究竟是怎么回师,跟文档上说的不一样啊.