为什么mod_rewrite 禁止返回404而不是403?

我的.htaccess有这个简单的mod_rewrite规则,而且我的浏览器工具(Firebug和Web Dev Toolbar)和我的apache日志都显示服务器返回的是404而不是403.只是想知道这是否正常,如果不正确,我可以补救吗?

 <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteCond %{REMOTE_ADDR} !^(192\.168\.0\.11|192\.168\.0\.161)$ RewriteRule ^(admin|login\.php) - [F] </IfModule> 

服务器回复:

 GET login.php 404 Not Found 

日志文件显示:

 (404) (Request:) "GET /login.php HTTP/1.1" 

编辑1:

还有一件事。 我应该在[F]禁止之后join[L]最后一​​个标志吗? 例如[F,L]谢谢! 🙂

编辑2:

有问题的文件绝对存在。 当我更改IP地址以允许自己访问时,我可以通过http向他们发送问题。 此外,当我将[F]更改为[G]时,将返回预期的服务器响应(410 Gone)。

事实certificate,我的apache2虚拟主机有以下ErrorDocument指令:

 ErrorDocument 401 /404.php ErrorDocument 403 /404.php ErrorDocument 404 /404.php 

…和404.php文件不存在(故意)。 当403被注释掉时, [F]按预期工作。

这当然不应该这样做。

你确定条件和规则是否匹配? login.php真的存在吗?

如果你没有其他的RewriteRule的话,那么使用[L]标志就没有太大的意义或者区别。

我不认为你的重写规则是匹配的。 我会分解它,分别检查你的rewritecond和rewriterule。