我的.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。