<Directory>是精确划定作用域的容器,不直接放行或跳转,必须显式配置Require授权(如Require all granted)、绝对路径匹配DocumentRoot、Options和AllowOverride控制能力,并嵌套Redirect或RewriteRule实现重定向。
directory 标签在 apache 主配置文件(如 httpd.conf)中,不是“开个门”就完事的开关,而是一个**精确划定作用域的容器**。它本身不放行、不跳转、不认证,所有访问控制行为都依赖其内部明确声明的指令——尤其是 require 系列语句。apache 2.4+ 已彻底弃用旧式 order/allow/deny,require all granted 是当前标准且必须显式写出的授权语句,漏写即 403 拒绝。
路径必须绝对、严格匹配 DocumentRoot
每个 <Directory> 块的路径参数必须是服务器上的**绝对文件系统路径**,且需与对应虚拟主机或主服务的 DocumentRoot 完全一致(建议都不加末尾斜杠):
- 若
DocumentRoot "/var/www/example.com",就写<Directory "/var/www/example.com"> - 不能简写为
<Directory "/var/www">——这会跨目录生效,对当前站点无效 - 子目录需单独定义,例如上传目录:
<Directory "/var/www/example.com/uploads"> - 路径大小写敏感,Linux 下
/var/www/HTML和/var/www/html视为两个不同目录
Require 是唯一授权入口,没有默认放行
Apache 2.4+ 不再隐含“允许所有”,任何 <Directory> 块内若未出现有效的 Require 指令,一律拒绝访问(HTTP 403)。常见写法包括:
Apache 2.4.62 官方 tar.gz 源码包是 Linux 及类 Unix 系统构建 Web 服务器的核心基础。通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
-
Require all granted:开放全部 IP(仅限可信环境) -
Require ip 10.0.0.0/8 172.16.0.0/12:允许多个私有网段 -
Require local:仅本机(127.0.0.1 和 ::1)可访问 - 黑名单式限制需用
<RequireAll>包裹:
<RequireAll><br> Require all granted<br> Require not ip 203.0.113.42<br> </RequireAll>
Options 和 AllowOverride 控制“能做什么”,而非“谁可以来”
权限分两层:一层管身份(Require),一层管能力(Options 和 AllowOverride):
-
Options -Indexes +FollowSymLinks:禁止目录列表(防敏感路径泄露),允许符号链接 -
Options None:最严模式,禁用所有扩展功能,适合静态资源目录 -
AllowOverride None:禁止 .htaccess 覆盖配置(推荐生产环境启用,提升性能与安全) -
AllowOverride All:允许 .htaccess 中使用重写、认证等指令(需确保该目录下 .htaccess 可信)
重定向和 Rewrite 必须嵌套在 Directory 内,且依赖模块支持
<Directory> 本身不执行跳转,但可作为重定向逻辑的作用域边界:
- 简单跳转用
Redirect:Redirect permanent /old /new(访问/old/page.html→ 跳至/new/page.html) - 复杂规则(如强制 HTTPS、URL 参数处理)必须用
RewriteRule:
需确认已加载mod_rewrite,并在块中设置AllowOverride FileInfo或All,再启用RewriteEngine On - 注意:
Redirect和RewriteRule的匹配对象是请求 URI(如/admin),不是服务器磁盘路径(如/var/www/html/admin)

















