如何拒绝访问给定目录的所有子目录?
(同时允许手动修改目录树中单个项目的访问权限。)
我试着用 <Directory(Match)>
来做这件事指令。服务器配置(000-sites-enabled)如下所示:
DocumentRoot /var/www
<Directory /var/www>
Allow from all
Deny from none
Order deny,allow
</Directory>
<Directory /var/www/*>
Deny from all
</Directory>
查询
http://localhost/
成功显示/var/www/index.html
并且对任何子目录的所有查询都失败。问题是:对 httproot 中文件的任何查询都失败了 - 即请求
http://localhost/index.html
将导致 403 Forbidden
.<Directory(Match)>
指令似乎实际上匹配目录和文件!?为了看看这是否属实,我试过:
<Directory /var/www/i*>
Deny from all
</Directory>
这仅拒绝访问以“i”开头的文件/目录。
有没有办法改变这种行为,让
<Directory>
只匹配目录?有没有另一种方法来实现所有子目录都被拒绝? (除了手动拒绝所有这些或手动启用所有文件)
最佳答案
最后,解决方案非常简单:
<Directory /var/www/*/>
Allow from None
Order allow,deny
</Directory>
注意尾部斜杠
/
在目录模式之后,这将使它只匹配目录,而不是文件!这与我们对
<Directory>
的期望完全一样。 -directive - 因为它只拒绝访问 /var/www/
的直接子目录.仍然可以使用
<Directory>
手动重新启用指定的子目录(树中的任何位置)指令。这与
<DirectoryMatch>
形成对比。这将- 还匹配树中的所有文件和目录,并且
- 覆盖所有
<Files>
或 <Directory>
树中任何项目的指令。
关于apache - 使用 apache2 服务器配置匹配/拒绝访问所有子目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5252474/