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>指令树中的任何项目.
| 归档时间: |
|
| 查看次数: |
43976 次 |
| 最近记录: |