将目录索引限制为经过身份验证的用户

将目录索引限制为经过身份验证的用户

本质上,我想做的是从 Apache 服务器上的 htpasswd 文件将目录索引限制为经过身份验证的用户。以下是我目前所拥有的。

AuthUserFile C:\XXXXXXXXX\htpasswd
AuthGroupFile /dev/null
AuthName "Password Protected!"
AuthType Basic
<Limit DirectoryIndex>
require valid-user
</Limit>

我已经确认,如果我将“DirectoryIndex”替换为“GET POST”,这种身份验证适用于普通目录访问或文件访问。我尝试通过将 DirectoryIndex 放入其中进行猜测,但似乎不起作用。在谷歌上搜索了这个问题并查看了 serverfault 上的许多其他问题后,我不知所措。如果有人知道如何做到这一点,那就太好了。

谢谢。

答案1

DirectoryIndex(mod_dir 的一部分)设置客户端请求目录时要提供的文件。因此,要限制对此的访问文件,您需要使用<Files>(或<FilesMatch>) 指令。(您不能引用该DirectoryIndex指令所引用的任何文件。)

例如,如果您的DirectoryIndex设置为index.html,则:

<Files "index.html">
    AuthUserFile C:\XXXXXXXXX\htpasswd
    AuthGroupFile /dev/null
    AuthName "Password Protected!"
    AuthType Basic
    Require valid-user
</Files>

如果您有多个可能的DirectoryIndex文档,那么您可以使用<FilesMatch>以正则表达式作为参数的容器。例如,如果DirectoryIndex index.php index.html设置了,则:

<FilesMatch "^index\.(html|php)$">
    # etc.
</FilesMatch>

或者,您所说的“目录索引”是指生成的目录列表 (mod_autoindex) 吗?但这与其本身关系不大,只是(如果启用)仅当文档不存在DirectoryIndex时才会生成目录列表。DirectoryIndex

在这种情况下,为了仅保护目录列表(即裸目录),您也可以使用容器Files,但指定一个空文件。例如:

# Protect directory-listing only
<Files "">
    # etc.
</Files>

<Limit DirectoryIndex>

Limit指令将所附指令限制为指定的 HTTP请求方法(即 GET、POST 等)。DirectoryIndex是 Apache 指令,而不是 HTTP 请求方法,因此无效。

相关内容