htaccess如何使用不同的用户密码保护文件

5

我有一个文件服务器,使用mod_autoindex来提供文件服务。我在htaccess中设置了用户名和密码,以便只有特定的人可以访问这些文件。我已经向htpasswd添加了另一个用户,但我只希望该用户可以访问某些文件/文件夹。

这是我的htaccess文件:

AuthType Basic
AuthName "restricted"
AuthUserFile E:\\path\\to\\.htpasswd

<Files "filesForAnyUser\\*">
  Require valid-user
</Files>

<Files "*">
Require user admin
</Files>

我相信我做错了什么,但是我找不到任何好的文档来解决这个问题。


“filesForAnyUser”是什么?那是一个文件夹吗? - Jon Lin
是的,这是一个文件夹,其中的文件应该对任何用户都可用。 - Tony Brix
E:\\path\\to\\.htpasswd 考虑改为 E:/path/to/.htpasswd,在某些特定情况下使用相反的斜杠将为您节省一些麻烦。 - Prix
2个回答

5
如果您有一个名为“filesForAnyUser”的文件夹和一个仅供管理员使用的文件夹,您需要创建2个htaccess文件。其中一个位于“filesForAnyUser”文件夹中:
AuthType Basic
AuthName "restricted"
AuthUserFile E:\\path\\to\\.htpasswd
Require valid-user

还有一个在另一个目录中:

AuthType Basic
AuthName "restricted"
AuthUserFile E:\\path\\to\\.htpasswd
Require user admin

那行得通,但为什么<Directory>或<Files>指令无法工作? - Tony Brix
@UziTech,DirectoryLocation都有“server”和“virtualhost”配置上下文。不是“htaccess”,因此这些指令不能在htaccess文件中使用,这很合理,因为将htaccess文件放在目录中有点像在该目录上使用<Directory> - Jon Lin

3
以下是我为其他人提供的最终解决方案。
将以下内容放在根文件夹中:
AuthType Basic
AuthName "restricted"
AuthUserFile E:\\path\\to\\.htpasswd
Require user admin

将以下内容放置在任何一个管理员和user1都可以访问该文件的文件夹中:
AuthType Basic
AuthName "restricted"
AuthUserFile E:\\path\\to\\.htpasswd
Require user admin user1 #users separated by space or "Require valid-user" if all users

如果您想让用户1仅访问某些文件,可以使用<FilesMatch>

AuthType Basic
AuthName "restricted"
AuthUserFile E:\\path\\to\\.htpasswd
Require user admin
<FilesMatch "^(doc1.pdf|doc2.txt|doc3.docx)$">
  Require user admin user1 #or valid-user
</FilesMatch>

这将为管理员提供访问该文件夹中所有文件的权限,但仅为user1提供对<FilesMatch>中列出的文件的访问权限。
注意: <FilesMatch> 中的文件是当前目录及其任何子目录中的文件。我不确定如何仅限制为当前目录。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接