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

标签 apache apache2 wildcard subdirectory server-configuration

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

我试着用 <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/

相关文章:

linux - 重定向 301 www.www.example.com

apache - 使用 GeoIP 和 .htaccess 重定向流量

javascript - 用于数组搜索的正则表达式通配符

ssl - 如何从一个 .crt(通配符)文件生成多个 .pem 文件?

php - 我需要安装什么模块才能在 $_SERVER 数组中查看我的 header 变量?

apache - 虚拟主机的错误不会写入指定的 ErrorLog,而是写入默认的 error_log

php - 新的 Laravel 安装 v 5.4 index.php 抛出解析错误。 PHP 7.2.10-0ubuntu0.18.04.1

django - Apache2 WSGI Django - 目录访问

apache2 - Tornado 是 "a relatively simple, non-blocking web server framework written in Python"-- 可以稍微解释一下这是什么意思吗?

Python - 为什么通配符位在这里不起作用?