【发布时间】:2012-03-03 14:04:36
【问题描述】:
好的,这是第 7 天没有成功尝试找到为什么出现 401 错误的答案...
现在, 根文件夹中的 .htaccess 仅包含 3 个字符串(已简化),并且项目中没有更多 .htaccess 文件:
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
因此,它将所有请求重定向为 https。它适用于任何 url,甚至适用于 /administration 目录。
所以,
http://mydomain.com
变成
https://mydomain.com
如果输入了https://mydomain.com,则没有重定向。
http://mydomain.com/administration/index.php
变成
https://mydomain.com/administration/index.php
如果输入了https://mydomain.com/administration/index.php,则没有重定向。
很清楚,问题在下面。
我希望 /administration 目录受密码保护。我的共享主机控制面板允许在不手动创建 .htaccess 和 .htpasswd 的情况下保护目录(您选择要保护的目录,创建用户名和密码,然后自动创建 .htaccess 和 .htpasswd)。因此,.htaccess 出现在 /administration 文件夹中。 .htpasswd 出现在其他地方,.htpasswd 的路径是正确的,并且一切看起来都正确(它的工作方式与手动创建它的方式相同)。所以,项目中有2个.htaccess文件,一个在根目录,一个在/administration目录(目录下有.htpasswd,.htaccess知道在哪里)。
创建密码后, 结果是:
你输入:
https://mydomain.com/administration/index.php
然后它要求输入密码。
如果输入正确,
显示https://mydomain.com/administration/index.php。
结果:完美运行。
但是,如果你输入
http://mydomain.com/administration/index.php(是的,http,没有 S)
然后而不是重定向到相同但 https 页面,
它重定向到
https://mydomain.com/401.shtml (starts with httpS)
由于未知原因,甚至不询问密码。 为什么?
我已经就这个问题联系了客户支持,他们确定问题出在 .htaccess 文件中,并且他们没有修复 .htaccess 文件(很明显,他们没有,我不介意)。
为什么会这样? 我是否忘记在 .htaccess 文件中添加一些标志或一些更改默认设置的选项?
P.S.为文件夹 /administration 手动创建 .htaccess 和 .htpasswd(不是从主机控制面板)会导致相同的 401 错误,如果不是 https,但输入了 http。
问题仅出现在 /administration 目录的 URL 上。
谢谢。
【问题讨论】:
-
我假设您使用的是 Apache。你真的收到错误吗?我问是因为 401 是 Apache 在需要身份验证时发送的响应。事实上,据我了解,浏览器应该在收到 401 标头后立即提示输入用户名和密码。在不同协议下重定向到同一 URL 时,可能出现问题,导致浏览器不提示输入凭据。查看此处以供参考:httpd.apache.org/docs/1.3/howto/auth.html 在“基本身份验证的工作原理”下。你用的是什么浏览器?
-
是的,它在 Apache 下。它至少发生在 Firefox、最流行的 Chrome 和 IE6.0(我知道它已经很老了)。我测试的所有浏览器都会出现相同的错误。
-
是的,这个问题确实超出了我的专业范围。我希望我能帮助你指出正确的方向。祝你好运!
标签: http .htaccess mod-rewrite https http-status-code-401