wordpress .htaccess通常具有以下重写规则:
# BEGIN wordpress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.PHP [L] </IfModule>
当我在我的网站上访问一个不存在的URL时,这个重写规则被命中,重定向到index.PHP,并提供我的自定义404.PHP模板文件.发送回客户端的状态代码是正确的404,如此HTTP Live Headers输出示例所示:
http://www.borngeek.com/nothere/ GET /nothere/ HTTP/1.1 Host: www.borngeek.com {...} HTTP/1.1 404 Not Found
但是,Apache在我的服务器日志中使用200状态代码报告整个交换,如下面的日志片段所示(为简单起见,已修剪):
{...} "GET /nothere/ HTTP/1.1" 200 2155 "-" {...}
这对我来说是有意义的,因为原始请求被重定向到存在的页面(index.PHP).有没有办法强制Apache将交换报告为404?
我的问题是来自Bad Guys的虚假请求在我使用的各种服务器统计软件(AWStats,Analog等)中显示为“成功请求”.我很乐意让它们在Apache端显示为404s,以便从生成的统计报告中过滤掉它们.
我尝试将以下行添加到我的.htaccess中,但它没有效果(我猜测的原因与之前的重定向规则相同):
ErrorDocument 404 /index.PHP?error=404
附加信息:
> OS是Debian 6.0.4,Apache版本看起来是2.2.22-3(托管在DreamHost上)
>发送回客户端的404正在由wordpress设置(即我不是在任何地方手动调用header())