Windows 11 下 Apache 2.4.69 + PHP 7.4.33 配置网站目录访问权限,核心是 Apache 的 <Directory> 指令与 Windows 文件系统权限协同:需为 Apache 运行账户(如 SYSTEM 或 NT SERVICE\Apache24)赋予网站根目录“读取和执行”及必要“写入”权限,并在配置中明确 Require all granted 或 denied;同时通过 open_basedir、upload_tmp_dir 和 is_writable() 验证 PHP 脚本实际读写能力。

Windows 11 下用 Apache 2.4.69 + PHP 7.4.33 配置网站目录访问权限,核心不是“开或关”,而是明确控制谁(本地用户/网络请求)、以什么方式(读/写/执行)、访问哪些路径。关键在 Apache 的 <Directory> 指令和 Windows 文件系统权限协同生效。
确认 Apache 运行账户与目录所有权
Apache 在 Windows 上默认以 SYSTEM 或自定义服务账户运行。必须确保该账户对网站根目录(如 C:\www\mycrm)有读取和执行权限:
- 右键网站目录 → “属性” → “安全”选项卡 → 点击“编辑” → 添加 Apache 服务账户(如
NT SERVICE\wampapache、LOCAL SERVICE或你配置的自定义账户) - 勾选“读取和执行”、“列出文件夹内容”、“读取”;若需上传/写日志,再加“写入”
- 务必点击“替换子容器和对象的权限”并确认,避免子目录继承失效
在 httpd.conf 或虚拟主机中设置 Directory 指令
仅靠 Windows 权限不够,Apache 自身的访问控制必须显式声明。在 httpd.conf 或 vhosts.conf 中定位到你的站点配置段:
<Directory "C:/www/mycrm">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
说明:
立即学习“PHP免费学习笔记(深入)”;
-
Options Indexes:允许目录无 index.html 时显示文件列表(生产环境建议去掉) -
FollowSymLinks:允许解析符号链接(如需软链资源才启用) -
AllowOverride All:允许 .htaccess 覆盖权限(若不用 .htaccess,设为None更安全) -
Require all granted:放行所有来源请求(开发机可用;正式上线应限制 IP 或加认证)
限制敏感目录的外部访问(如 config/、data/)
PHP CRM 或 OA 类系统常含配置文件、上传临时目录等敏感路径,必须禁止 Web 直接访问:
<Directory "C:/www/mycrm/config">
Require all denied
</Directory>
<Directory "C:/www/mycrm/data">
Require all denied
</Directory>
也可统一用 <FilesMatch> 屏蔽特定后缀:
<FilesMatch "\.(env|ini|log|sql|bak)$">
Require all denied
</FilesMatch>
验证 PHP 脚本能否正常读写(非纯静态访问)
访问权限 ≠ PHP 执行权限。例如上传文件、写日志、连接数据库,依赖的是 PHP 进程的上下文权限:
- 检查
php.ini中open_basedir是否限制了可访问路径(如设为C:/www/mycrm/,则 PHP 无法读写其外文件) - 确认
upload_tmp_dir指向的临时目录,Apache 运行账户对该目录有写权限 - 测试一个简单脚本:
<?php var_dump(is_writable('C:/www/mycrm/data')); ?>,结果为true才算到位



















