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

如何拒绝访问给定目录的所有子目录? (允许手动修改目录树中单个项目的访问权限。) 我尝试用
<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)>
指令似乎实际匹配目录AND文件!? 为了看看这是否属实,我试过:
<Directory /var/www/i*>
    Deny from all
</Directory>
这拒绝仅访问以“i”开头的文件/目录。 有没有办法改变这种行为,让
<Directory>
只匹配目录?还有另一种方法可以实现所有子目录被拒绝吗? (除了手动拒绝所有文件或手动启用所有文件)     
已邀请:
最后,解决方案变得非常简单:
<Directory /var/www/*/>
    Allow from None
    Order allow,deny
</Directory>
注意目录模式后面的尾部斜杠
/
,这将使它只匹配目录,而不是文件! 这与我们对
<Directory>
指令的期望完全一样 - 因为它拒绝只访问
/var/www/
的直接子目录。 指定的子目录(树中的任何位置)仍然可以使用
<Directory>
指令手动重新启用。 这与
<DirectoryMatch>
相反   - 也匹配所有文件&amp;树中的目录和   - 覆盖树中任何项目的所有
<Files>
<Directory>
指令。     
这样做对我来说。
<DirectoryMatch "^/var/www/(.+)/"> # don't put $ at the end
Order Allow,Deny
Deny From All
</DirectoryMatch>
编辑 为了不拒绝子子目录(下面的注释),在配置文件中添加以下上面的DirectoryMatch:
<DirectoryMatch "^/var/www/(.+?)/(.+)/"> # again no $, see comment
Order Deny,Allow
Allow From All
</DirectoryMatch>
    
用这个:
<Directory /var/www/public>
    allow from all
</Directory>


<DirectoryMatch "^/var/www/public/(.+)/">
   deny from all
</DirectoryMatch>
您可能想要添加选项等。 诀窍是如何合并指令。     
最好的方法是将公共场所不可用的所有内容移动到根树之外的目录,如/ home / my / app /
<Directory /home/my/app>
    Order Allow,Deny
    Deny from all
</Directory>
然后为该目录中的Apache用户以及导致该目录的所有目录(例如/ home和/ my)授予读取权限 这样,当发生某些根目录配置错误时,不存在某些内容泄漏的风险。     
您可以通过从配置文件中的
Options
指令中删除
Indexes
选项来禁用所有子目录中的自动索引,因此对于默认配置,
Options
指令应如下所示: httpd.conf中:
...
Options FollowSymLinks
...
(未设置“索引”选项。) 然后,将
index.html
index.php
文件放在您希望可供客户端访问的每个特定子目录中。 如果要在某个特定目录中启用自动索引,可以在这些目录中添加
.htaccess
文件,并将此行放在
.htaccess
文件中:
Options Indexes
请注意,
.htaccess
将对其目录及其所有子目录进行递归影响,因此您应该通过添加
.htaccess
并禁用自动索引来排除任何您不希望使用此选项的递归子目录:
Options -Indexes
注意:要启用
.htaccess
文件并对apache配置生效,您应该在目录上
AllowOveride All
匹配您要放置
.htaccess
文件。     
所以,我有两个可能有帮助(或没有)的想法。 第一个是位置可以覆盖您的目录权限。所以一定要确保没有。点击localhost /正在点击你设置为root的任何内容,这可能会覆盖你的安全性。这就是为什么如果直接指定文件,你就无法实现它。因此,如果您不希望人们能够访问您的根目录,则不应指定根目录。 关于限制访问子目录的观点,我会查看其他帖子。 ......也许没用。也许更多关于您的用例的细节会有所帮助。 https://serverfault.com/questions/190447/apache-2-htaccess-matching-all-sub-directories-of-current-directory     

要回复问题请先登录注册