仅在 DirectoryIndex 上进行基本身份验证

仅在 DirectoryIndex 上进行基本身份验证

我正在尝试为我的索引文件配置基本身份验证,并且只为我的索引文件配置。我的配置如下:

<Files index.htm>
    Order allow,deny
    Allow from all
    AuthType Basic
    AuthName "Some Auth"
    AuthUserFile "C:/path/to/my/.htpasswd"
    Require valid-user
</Files>

当我访问该页面时,401 Authorization Required返回结果与预期一致,但浏览器未提示输入用户名/密码。进一步检查发现,Apache 没有发送标WWW-Authenticate头。

GET http://myhost/ HTTP/1.1
Host: myhost
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/534.30 (KHTML, like Gecko) Chrome/12.0.742.100 Safari/534.30
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3


HTTP/1.1 401 Authorization Required
Date: Tue, 21 Jun 2011 21:36:48 GMT
Server: Apache/2.2.16 (Win32)
Content-Length: 401
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>401 Authorization Required</title>
</head><body>
<h1>Authorization Required</h1>
<p>This server could not verify that you
are authorized to access the document
requested.  Either you supplied the wrong
credentials (e.g., bad password), or your
browser doesn't understand how to supply
the credentials required.</p>
</body></html>

Apache 为什么要这样做?如何配置它才能正确发送该标头?

值得注意的是,如果我为整个目录设置这些指令,它们会正常工作。只有当我将它们配置为目录索引时,它们才会不起作用。这就是我知道我的 .htpasswd 等文件没有问题的原因。

我在 Windows 上使用 Apache 2.2。

另外我发现了这个被列为 Apache 1.3 中的一个错误。这让我相信这实际上是我的配置问题。

答案1

我可以在 Fedora 下的 Apache 2.2 上重现此问题。这似乎是一个错误。解决方法是使用:

<Files ~ "(^index.htm$)|(^$)">

这是另一个类似的错误:https://issues.apache.org/bugzilla/show_bug.cgi?id=46685

答案2

对于简单情况,您的配置看起来不错(请参阅这个帖子举个例子),所以我会首先查看是否有任何可能使此案例变得不简单的因素,然后消除它们,直到找到导致问题的因素。

例如:

  • 您是否专门访问“index.htm”,还是依赖于目錄索引当您访问时自动加载”http://site.url/“?
  • DirectoryIndex 中是否配置了“index.htm”?
  • 您是否尝试过将其作为第一个选项?
  • 由于您使用的是 Windows,您确定文件名中的字母大小写与您认为的一样吗?Windows将把全部大写的文件名转换为句子大小写以便显示, 例如。
  • 您是否尝试过为不在 DirectoryIndex(test.html)中的文件设置此参数,以查看是否相关?

Apache 文档中有一个很好的页面详细介绍了如何目录、文件和位置并附上一些例子,以供进一步参考。

答案3

您可能需要首先调整您的文件指令(<Files ./index.htm>),否则它将匹配该 .htaccess 下的整个目录结构中的任何 index.htm 文件。

您发布的配置在 Debian - Apache 2.2 安装上完美运行。我建议尝试将其放在指令中<Location>- 并在 2 个不同的浏览器上尝试。

答案4

我认为该指令之间存在冲突:

 allow from all

和指令

 require valid user

我想知道如果您从配置记录中删除所有允许,这可能会实现您想要的效果。

顺便说一句,我也会将文件 index.html 更改为位置 /index.html。

相关内容