Apache中配置<Directory>权限核心是路径精准匹配DocumentRoot、嵌套于VirtualHost内、用Require替代Order/Allow/Deny;公开目录设Options -Indexes +FollowSymLinks、AllowOverride All、Require all granted;上传目录需FilesMatch禁止脚本执行;敏感目录直接Require all denied。

Apache 中配置基础的 <Directory> 访问权限,核心是明确路径、选对指令、用好 Require 模型。2.4 版本起不再支持 Order/Allow/Deny,必须用现代授权语法,否则配置无效或被忽略。
路径必须写绝对路径,且嵌套在 VirtualHost 里
<Directory> 不是全局生效的,它只作用于当前 <VirtualHost> 内部,并且路径要和该虚拟主机的 DocumentRoot 实际对应。相对路径或不匹配的路径会导致规则不生效。
- 正确写法:
<Directory "/var/www/example.com/public_html"> - 错误写法:
<Directory "public_html">或<Directory "/var/www/other-site">(跨虚拟主机) - 多个目录块可共存,Apache 按“最长路径匹配”选择最具体的那个
常用组合:公开目录的标准配置
面向访客的网站根目录通常需要允许访问,但禁掉危险功能。典型安全组合如下:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
Options -Indexes +FollowSymLinks:关闭目录列表,允许符号链接 -
AllowOverride All:仅当真需用.htaccess时才开;否则设为None更安全 -
Require all granted:放行所有合法请求(注意不是Require all denied)
上传目录要单独限制脚本执行
比如 /uploads 这类用户可写目录,必须防止上传 PHP 等脚本被解析执行:
- 先定义独立的
<Directory "/var/www/example.com/public_html/uploads"> - 内部加
<FilesMatch "\.(php|pl|py|jsp|sh|cgi)$">Require all denied</FilesMatch> - 再补一句
Require all granted,确保其他静态文件仍可访问
拒绝访问某个目录的最简写法
想彻底屏蔽某个子目录(如后台、配置目录),不用复杂逻辑,直接拒绝即可:
<Directory "/var/www/example.com/private">Require all denied</Directory>
注意:没写 Require all denied 时,会继承父级或默认策略,可能意外放行。

















