在 .htaccess 文件中使用 Require 指令可以防止目录被显示。

4
我有如下的目录结构。
-root_folder
   .htaccess
   -sub_folder
       .htaccess

子文件夹中 .htaccess 文件的内容:
AuthType Basic
AuthName "webdav"
AuthUserFile /var/www/test/passwd.dav
Require user test

root_folder 包含以下 .htaccess 文件

Satisfy any
Order deny,allow
Deny from all
Allow from env=ALLOWED
SetEnvIfNoCase Request_URI "^/+webdav/root_folder/?$" ALLOWED

请注意,我正在使用 WebDav。
它设置在 /etc/apache2/conf.d/webdav。该文件包含以下内容:
Alias /webdav /home/user/projects/test/public
<Location /webdav/>
    Order Allow,Deny
    Allow from #list of ips here
    DAV On
    PassengerEnabled off
    LimitXMLRequestBody 0
    Options Indexes FollowSymLinks
</Location>

问题在于,当我尝试使用浏览器访问localhost/webdav/root_folder/文件夹时,sub_folder未显示。但是,当我删除Require user some_user指令后,sub_folder会在列表中显示。如果我尝试在启用Require user指令的情况下输入localhost/webdav/root_folder/sub_folder/,我会被要求输入登录名和密码,如果我输入正确的凭据,则一切正常。
是否可能同时列出目录中的所有内容,并在子文件夹内的.htaccess文件中使用require user指令来控制对它们的访问?
1个回答

2
在您的根目录中(我相信那是你的$DOCUMENT_ROOT),创建一个名为.htaccess的文件,并添加以下内容:
SetEnvIfNoCase Request_URI "^/*$" ALLOWED

Satisfy        any
Order          deny,allow
Deny from      all
Allow from     env=ALLOWED

如果root_folder不是$DOCUMENT_ROOT,则使用以下代码:
SetEnvIfNoCase Request_URI "^/+root_folder/?$" ALLOWED

作为第一行。


感谢您的回复。现在sub_folder已经显示出来了,但是当我点击它时,没有要求我输入登录名和密码。我的目标是控制对不同目录的访问权限,而不是隐藏它们。 - roman
在我的Apache安装中,我已经尝试了所有方法,但它总是从root_folder列出sub_folder,并在我点击sub_folder时要求登录/密码。唯一我没有的是mod_dev加载和DAV开启。我稍后也会尝试这个并让你知道结果。 - anubhava
我认为在我的情况下,“Satisfy any”指令会破坏方案,因为我在“/etc/apache2/conf.d”中的“webdav”配置文件中有一个“Allow from #long list of ips”的IP列表。这个IP列表包含“127.0.0.1”,所以如果我尝试访问一些“sub_folder”,Apache的配置解析器会找到这个指令并允许访问这个“sub_folder”。实际上,只要满足“Allow”指令中的任何条件,它就会允许访问。使用“Satisfy all”仍然可以防止目录被显示。如果我使用“Satisfy any”并从“webdav”文件中删除“Allow from #ip-list”,则一切都像你描述的那样工作。 - roman
如果user_1可以访问sub_folder,那么另一个问题就出现了。但是我在这个sub_folder里面有一些目录,它们只应该对user_2可用。当我输入user_1凭据并进入sub_folder时,sub_folder内的目录不会显示出来,我回到了最初的情况。 - roman
我可以大胆地说,通过添加每个用户的权限,问题的本质已经完全改变了。如果您注意到我的答案能够解决在此处发布的原始问题。但是,如果您想要针对这个特定情况(个人用户级别访问)的答案,请随时创建一个新问题,SO用户(包括我在内)将会尝试为您提供解决方案。 - anubhava
显示剩余2条评论

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