使用.htaccess密码保护AutoIndex但不保护静态文件

时间:2009-10-01 08:58:03

标签: apache authentication .htaccess mod-rewrite mod-autoindex

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

以下是我提出的建议:

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在没有登录的情况下进行渲染。顶部的重写是我在请求auth之前重新定向请求失败,但没有骰子,它首先要求auth什么。

我已经做了大约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)

2 个答案:

答案 0 :(得分:0)

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

Options +Indexes +FollowSymLinks

RewriteEngine On
…

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

编辑为什么不为您想要的目录启用索引?

答案 1 :(得分:0)

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

我想做类似的事情,尽管我觉得更简单 - 我想在访问目录时继续使用Apache自动索引,但是要保护密码(而不是完全禁用它,为了我自己的利益) - 但是在同时,如果直接链接,可以自由访问任何文件,这样人们就可以在不需要用户名和密码的情况下访问它们。

基本&#34;密码目录&#34;互联网上广泛展示的技巧是:

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。

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

似乎表现得这样,并且基于我到目前为止的测试工作得很好。