我的 中有这个简单的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。