我有一个如下的网站结构设置,我正在尝试组织每个网站的访问级别,但没有指定,<Directory>
因为这需要修复结构(也就是说,如果我将其复制到不同的网站,复制到子文件夹中,则需要编辑所有.htaccess 到新位置)。
- /应用程序/- 允许所有,拒绝配置/等等
- /应用程序/模板/- 全部拒绝
- /应用程序/模板/mytheme/- 仅允许所有图像、javascript、css、字体
- /应用程序/lib/- 全部拒绝
我曾尝试实施 Apache2.4 的新指令方案:
/etc/apache2/conf-enabled/security.conf
... more stuff above ...
<Directory />
AllowOverride All
Require all denied
</Directory>
... more stuff below ...
并在应用程序的根目录中添加Require all allowed
到,同时在我希望拒绝访问的文件夹中添加到。.htaccess
Require all denied
.htaccess
问题Require all denied
似乎什么都没做。我见过使用mod_auth_compat
或任何库的参考,但它似乎只对旧版本的 apache (v2.3) 是必需的。
我在 Debian 8 上使用 Apache 2.4。
此前,我会提供:
Order Allow, Deny
Deny from all
然后将以下内容放入需要访问权限的文件夹中:
Allow from all
..我需要只允许特定文件类型的访问,
<FilesMatch "\.(jpg|jpeg|gif|png|bmp|svg|css|less|sass|scss|js|ttf|woff|woff2|eot)$">
Allow from all
</FilesMatch>
根据 apache 的文档,混合使用新旧声明可能会产生意外结果,因此,我只使用新声明。没有杂散.htaccess
文件或*.conf
使用旧声明格式加载的文件 - 所以这应该有效?
鉴于我布置的文件夹结构,以及'/etc/apache2/conf-enabled/security.conf'中加载的内容(因为这是 AllowOverride 的“根”声明所在的位置[AllowOverride All
在网站配置文件(000-default.conf)中以相同格式指定声明时似乎不起作用],有人可以提供一些指导或最好是解决该问题的方法。
答案1
请参阅带有该指令示例的升级指南Require
:https://httpd.apache.org/docs/trunk/en/upgrading.html
Deny from all
就是现在Require all denied
Allow from all
就是现在Require all granted
剧情转折:Apache 2.4 默认不授予对任何目录的访问权限,并且评估顺序已经改变。
Directory /
在 apache 2.2 中,用+来阻止对文件系统的访问是很常见的,Require all denied
就像您写的那样。现在应该将其删除。如果它取代了子目录中的权限,就会适得其反。
请参阅有关合并身份验证限制的文档。实际操作起来非常复杂。https://httpd.apache.org/docs/trunk/en/mod/mod_authz_core.html#authmerging
在子目录中, in先于Require all granted
in/app
被评估。看起来 apache 在满足第一个允许规则时授予访问权限,因此允许访问。整个树由父级上的指令打开,对此您无能为力。Require all denied
/app/lib
我的建议是不要混合公共和私人内容。这在实践中是完全无法管理的。如果它被提供,它就应该被提供。