2

我的网络服务器上有可公开访问的文件。我想启用自动索引(选项 + 索引),但我想要求输入密码才能查看这些列表。我设置 Auth 没有问题,但是公共文件和 DirectoryIndex 文件存在复杂性,因为如果有人还要求提供目录,并且有 DirectoryIndex 文件,他们不应该为此输入密码。出于安全原因,只有自动索引需要密码。

这是我想出的:

Options +Indexes
Options +FollowSymLinks

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}index.php -f
RewriteRule ^.*$ %{REQUEST_URI}index.php [R,NE,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}index.html -f
RewriteRule ^.*$ %{REQUEST_URI}index.html [R,NE,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}index.htm -f
RewriteRule ^.*$ %{REQUEST_URI}index.htm [R,NE,L]

<FilesMatch "^$">
AuthName "My Auth Name"
AuthType Basic
AuthUserFile /path/to/my/.htpasswd
Require valid-user
</FilesMatch>

FilesMatch 位工作正常。任何对目录的请求都会被要求登录,但普通文件会通过。这很简单,困难的部分是让 DirectoryIndexes 在不登录的情况下呈现。顶部的重写是我在请求身份验证之前尝试重定向请求失败,但没有骰子,它首先要求身份验证什么。

我已经对此进行了大约 6 个小时的研究,此时我即将放弃。任何帮助,将不胜感激。

编辑:这是一个示例目录结构。

/images/blah.jpg   <- does not require a password
/images/           <- requires a password to view listing
/index.html        <- does not require a password
/                  <- does not require a password because a DirectoryIndex file exists (index.html)
4

2 回答 2

0

我知道这是一个坟墓,但我希望它可以帮助任何在那里谷歌搜索的人(比如我自己——我对所有这些 htaccess 东西都是全新的)。

我想做一些类似的事情,虽然我认为更简单——我想在访问目录时继续使用 Apache 自动索引,但要对其进行密码保护(而不是完全禁用它,为了我自己的利益)——但同时,如果直接链接,则可以免费访问任何文件,因此人们无需用户名和密码即可访问它们。

互联网上广泛展示的基本“密码目录”技巧是这样的:

AuthType Basic
AuthName "restricted area"
AuthUserFile /path/to/.htpasswd
require valid-user

一个限制 require 属性范围的简单添加实现了我所追求的:

AuthType Basic
AuthName "restricted area"
AuthUserFile /path/to/.htpasswd
<Files "">
require valid-user
</Files>

如果我尝试访问没有索引文件的目录(因此自动索引),我必须输入用户名和密码。

如果我尝试使用索引文件访问目录,它会正常加载 - 不需要 u/p。

如果我尝试直接访问文件,它会正常加载,如上所述,不需要 u/p。

正如可能预期的那样,它同样会影响所有子文件夹。

根据我迄今为止的测试,似乎表现得这样并且工作得很好。

于 2012-12-24T14:49:50.563 回答
0

只需删除该<FilesMatch>块即可将其应用于所有请求,而不仅仅是那些请求目录。

Options +Indexes +FollowSymLinks

RewriteEngine On
…

AuthName "My Auth Name"
AuthType Basic
AuthUserFile /path/to/my/.htpasswd
Require valid-user

编辑    你为什么不只为那些你想要允许的目录启用索引?

于 2009-10-01T09:25:04.863 回答