DocumentRoot 必须精准指向框架 public 目录并配以严格权限控制,否则将导致 403 错误或 PHP 文件被下载;需用绝对路径匹配 Directory 块,显式配置 Require all granted、AllowOverride All 和 Options +FollowSymLinks,并确保系统权限为 755/644。

DocumentRoot 配置必须搭配精准的
DocumentRoot 路径要准且安全
它必须指向实际可公开访问的入口目录(如框架的 public/ 子目录),不能是项目根目录:
- ✅ 推荐写法:
DocumentRoot "/var/www/myapp/public"(ThinkPHP、Laravel 等现代框架强制要求) - ❌ 错误写法:
DocumentRoot "/var/www/myapp"(会暴露 config/、runtime/ 等敏感文件) - ⚠️ 斜杠统一:Linux 下建议不加末尾斜杠,避免旧版 Apache 报 403;Windows 无严格限制但保持一致更稳妥
块必须与 DocumentRoot 绝对路径完全匹配
Apache 2.4+ 默认拒绝所有请求,
- 路径必须一字不差:
<Directory "/var/www/myapp/public">—— 不能少字符、不能多斜杠、不能用相对路径 - 子目录需单独定义:上传目录如
/uploads应另起一个块,且优先级更高 - 禁止简写:
<Directory "/var/www">会越权影响其他站点,不可取
权限指令必须显式启用
仅写 Require all granted 还不够,还需配合功能开关:
-
Require all granted:放行所有客户端访问(Apache 2.4+ 唯一有效方式) -
AllowOverride All:允许 .htaccess 覆盖配置(重写规则、环境变量依赖此项) -
Options +FollowSymLinks:若 DocumentRoot 指向符号链接,必须开启此项 - 无需
Options +ExecCGI:PHP 模块模式下不依赖 CGI 执行权限
系统级权限不能忽略
Apache 进程用户(如 www-data 或 apache)必须有读取和执行权限:
- Linux 下检查属主:
sudo chown -R www-data:www-data /var/www/myapp/public - 设置最小必要权限:
sudo chmod -R 755 /var/www/myapp/public(目录)和644(文件) - PHP 脚本无需额外可执行位(.php 是被解析的,不是被直接运行的)


















