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