directory指令用于限定apache对特定目录路径及其子目录的访问控制和功能行为,必须嵌套在内或全局server config中,路径须为绝对路径且与文件系统严格一致,按最长匹配原则生效,配合options、allowoverride、require等指令实现精细化权限管理。
directory 指令用于限定 apache 对特定目录路径及其子目录的访问控制和功能行为,必须嵌套在 <virtualhost></virtualhost> 块内(或全局 server config 中),且路径需与文件系统实际路径严格一致。它不作用于 url 路由,只作用于磁盘上的真实目录结构。
路径写法与作用范围
必须使用绝对路径,例如:
-
<directory></directory>—— 精确匹配该路径及所有子目录 - 不能写成
<directory></directory>或相对路径,否则配置无效 - 多个
<directory></directory>块共存时,Apache 按“最长路径匹配”原则选择最具体的那个生效 - 正则表达式写法需加
~,如<directory></directory>,但建议优先用静态路径,更清晰可控
核心子指令搭配要点
每个 <directory></directory> 块内通常组合以下指令:
-
Options:控制目录级功能,常见组合有:
Options -Indexes +FollowSymLinks(禁目录列表、允许符号链接)Options -ExecCGI -Includes(禁止执行脚本和服务端包含) -
AllowOverride:决定是否读取 .htaccess 文件
生产环境推荐AllowOverride None(禁用 .htaccess,提升性能与安全)
若需局部重写规则,仅在必要目录设为All或细粒度如FileInfo AuthConfig -
Require:Apache 2.4+ 唯一授权模型,替代已废弃的
Order/Allow/DenyRequire all granted(放行所有合法请求)Require ip 10.0.0.0/8(仅允许内网访问)Require local(仅本机访问)
典型场景配置示例
针对不同用途的目录,应差异化设置:
-
公开网站根目录(如
/var/www/site/public):Options -Indexes +FollowSymLinksAllowOverride NoneRequire all granted -
上传目录(如
/var/www/site/public/uploads):
单独定义<directory ...></directory>块
加入<filesmatch> Require all denied </filesmatch>
再补一句Require all granted放行静态文件访问 -
管理后台目录(如
/var/www/site/admin):Require ip 203.0.113.5Require ip 2001:db8::/32Require all denied(显式拒绝其余所有)
调试与生效关键点
配置后必须验证并重启服务才能生效:
- 语法检查:
sudo apache2ctl configtest(Debian/Ubuntu)或sudo httpd -t(RHEL/CentOS) - 重载配置:
sudo systemctl reload apache2(或httpd) - 注意 SELinux 策略(RHEL系)可能拦截访问,临时测试可用
sudo setenforce 0 - 确保系统文件权限正确(如
www-data:www-data可读目标目录),Apache 指令无法绕过操作系统级权限











