有没有办法通过 .htaccess 文件中的某些配置让 apache 发送 403 而不是 401?顺便说一下,我正在使用 dreamhost。
编辑:
我应该更好地解释一下我在做什么。我正在使用 jQuery 制作 HTTP 身份验证登录页面。我的目标是绕过浏览器弹出的登录窗口。为此,我希望当我尝试访问受保护领域的文件时,服务器给我一个 403 错误,而不是我目前默认得到的 401。当我得到 403 时,我可以运行一个函数来告诉用户他们的密码错误,而不是浏览器弹出窗口,这不会告诉用户他们的信息错误,它最终只会让网站看起来很糟糕。
谢谢 =)
答案1
您可以使用重写规则来生成 403。
RewriteEngine on
RewriteRule myfile myfile [F]
在这种情况下,F 表示禁止(403)。
编辑
...是的,这进入了.htaccess 文件。
编辑
正如 radius 答案的评论中所述,您想要检查用户是否获得授权。我不知道您是如何进行授权的,但我猜这不是立即可行的。我通常在 PHP 中进行授权,在这种情况下,您可以简单地执行header('HTTP/1.1 403 Forbidden');
,但您似乎正在使用其他机制(我猜是 apache 内部机制)。
答案2
chmod
该文件将无法被读取。
答案3
请向我们提供更多有关您正在做的事情的信息。
如果您有一个使用身份验证的受保护资源,apache 将返回代码 401。如果它返回 403 而不是 401,您的浏览器将不会要求您输入密码。
如果资源不受身份验证保护,您不应该收到错误 401。
编辑:根据您的编辑,我了解您想要http://网站/文件/forbar返回 403,并出现一个 403 错误页面,要求输入密码(比如说http://website/403.php)。
我认为您不能这样做,因为当用户登录时,您的脚本将无法告诉 apache 该文件不再被禁止。
因此,您可能会让文件返回 403,但它永远不会返回其他内容。
我的做法是让“文件”位于你的公共网络目录之外,然后让用户加载http://website/myscript.php?getfile=foobar,这样你的脚本就可以控制用户是否经过身份验证,并在用户进行身份验证时提供文件。
当然,你可以添加一个 apache 重定向来告诉http://网站/文件/重定向到“某物”http://website/myscript.php?getfile=“某物”(这个可能是 RedirectMatch /file/(.*)http://website/myscript.php?getfile=1 美元