documentroot 必须使用绝对路径,如“/var/www/html”或“c:/xampp/htdocs”,不可用相对路径;需确保目录存在、权限正确、末尾无斜杠,并配套配置含require all granted的directory块。
apache 的 documentroot 必须用绝对路径配置,不能用相对路径或符号链接(除非显式启用 followsymlinks)。它定义了用户通过 http 请求访问文件时的起始目录,所有 url 路径都以此为基准映射到磁盘上的真实位置。
DocumentRoot 的绝对路径写法
无论 Linux 还是 Windows,都要写完整路径,开头不能省略驱动器盘符(Windows)或根斜杠(Linux):
- Linux 示例:
DocumentRoot "/var/www/html"或DocumentRoot "/home/www/myapp/public" - Windows 示例:
DocumentRoot "D:/www/site1"或DocumentRoot "C:/xampp/htdocs/blog"
注意:路径中使用正斜杠 / 即可,即使在 Windows 上也不必写成反斜杠 \;双引号必须保留,尤其路径含空格时。
配置后必须同步设置 权限块
仅改 DocumentRoot 不够,Apache 默认会拒绝访问新路径,必须添加对应 <directory></directory> 块并明确授权:
- 路径需与
DocumentRoot完全一致(包括末尾斜杠与否) - 关键指令至少包含:
Require all granted(2.4+ 版本)或Allow from all(旧版) - 如需支持
.htaccess,还要加AllowOverride All
示例(Apache 2.4):
DocumentRoot "/home/www/laravel/public"
ServerName example.test
Require all granted
AllowOverride All
常见错误和规避要点
以下做法极易导致 403 Forbidden 或 404 Not Found:
- 把 Laravel 项目根目录设为 DocumentRoot(如
"/home/www/laravel"),应指向其public/子目录 - 路径权限未开放:目标目录属主/属组不对、SELinux 或 Windows ACL 阻止 Apache 进程读取
- 路径拼写错误或大小写不一致(Linux 区分大小写)
- 忘记重启 Apache 或未运行
httpd -t检查配置语法
多站点场景下每个 VirtualHost 独立配置
若托管多个网站,每个 <virtualhost></virtualhost> 必须单独指定自己的 DocumentRoot 和配套 <directory></directory>:
- 不能只在全局段写一次
DocumentRoot就期望所有虚拟主机共用 - 各站点目录权限互不影响,避免交叉暴露敏感文件(如 .env、app/ 目录)
- 推荐为每个站点分配独立用户或使用
suexec隔离执行环境











