使用apache2服务器配置匹配/拒绝所有子目录的访问

col*_*fix 11 apache server-configuration apache2 wildcard subdirectory

如何拒绝访问给定目录的所有子目录?(允许手动修改目录树中单个项目的访问权限.)

我尝试用<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>
Run Code Online (Sandbox Code Playgroud)

查询到http://localhost/成功地显示/var/www/index.html和所有查询到任何子目录失败.

问题是:对httproot中的文件的任何查询都会失败 - 即请求http://localhost/index.html将导致403 Forbidden.

<Directory(Match)>指令似乎实际匹配的目录和文件!?

为了看看这是否属实,我试过:

<Directory /var/www/i*>
    Deny from all
</Directory>
Run Code Online (Sandbox Code Playgroud)

这拒绝仅访问以"i"开头的文件/目录.

有没有办法改变这种行为,<Directory>只让匹配目录?还有另一种方法可以实现所有子目录被拒绝吗?(除了手动拒绝所有文件或手动启用所有文件)

col*_*fix 16

最后,解决方案变得非常简单:

<Directory /var/www/*/>
    Allow from None
    Order allow,deny
</Directory>
Run Code Online (Sandbox Code Playgroud)

注意/目录模式后面的尾部斜杠,这将使它只匹配目录,而不是文件!

这与我们对<Directory>-directive的期望完全一样- 因为它拒绝只访问直接子目录/var/www/.指定的子目录(树中的任何位置)仍然可以使用<Directory>指令手动重新启用.

这是相反的<DirectoryMatch>,这将
-也匹配的所有文件和目录树中和
- 覆盖所有<Files><Directory>指令树中的任何项目.