为什么 mod_rewrite [F] forbidden 返回 404 而不是 403?

为什么 mod_rewrite [F] forbidden 返回 404 而不是 403?

我的 中有这个简单的mod_rewrite规则.htaccess,并且我的浏览器工具(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] 禁止后添加 [L] 最后一个标志?例如[F,L]谢谢!:)

编辑2:

有问题的文件肯定存在。当我更改 IP 地址以允许自己访问时,我能够毫无问题地通过 http 访问它们。此外,当我将 [F] 更改为 [G] 时,会返回预期的服务器响应 (410 Gone)。

答案1

事实证明,我的 apache2 vhost 具有以下ErrorDocument指令:

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

... 并且 404.php 文件不存在(故意的)。注释掉 403 后,[F]一切正常。

答案2

这当然是不应该的。

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

如果您没有其他的RewriteRule,那么使用标志就没有多大意义/区别[L]

答案3

我认为您的重写规则不匹配。我会将其分解并分别检查您的 rewritecond 和 rewriterule。

相关内容