DocumentRoot必须指向public目录,不能是项目根目录;否则会暴露.env等敏感文件并导致403或404错误,同时需配置<Directory>块启用AllowOverride All和Require all granted,并确保mod_rewrite已启用、hosts与虚拟主机配对且路径为绝对路径。

DocumentRoot 必须指向 public 目录,不能是项目根目录
访问 http://myapp.test 报 403 或显示目录列表,大概率是因为 DocumentRoot 指向了 Laravel 项目根目录(如 /Users/you/myapp),而不是 public/ 子目录。Apache 会直接暴露 .env、app/、storage/ 等敏感路径,这是严重安全隐患。
正确做法是:把 DocumentRoot 和对应 <directory></directory> 的路径都设为绝对路径,且结尾必须是 /public:
DocumentRoot "/Users/you/myapp/public" <Directory "/Users/you/myapp/public">
- macOS 路径用正斜杠
/,别用反斜杠\ - 用户名不能写成
~,必须展开为完整路径(如/Users/alex) - 确认该路径下真实存在
index.php和.htaccess
AllowOverride All 缺失会导致所有非 / 路由 404
Laravel 的路由重写全靠 public/.htaccess 文件里的 RewriteRule。Apache 默认禁用该文件,除非显式允许。漏掉或写错这行,/login、/api/users 全部 404。
关键点只在 <directory></directory> 块内生效,且路径必须和 DocumentRoot 完全一致:
<Directory "/Users/you/myapp/public">
AllowOverride All
Require all granted
</Directory>
-
AllowOverride None或注释掉这行 →.htaccess被忽略 → 所有重写失效 - 如果用了 Apache 2.2(旧版 macOS),需用
Order allow,deny+Allow from all替代Require all granted - 确保
mod_rewrite已启用:检查httpd.conf中LoadModule rewrite_module libexec/apache2/mod_rewrite.so前没有#
hosts 文件和虚拟主机配置要配对
只改 Apache 配置不改 /etc/hosts,浏览器根本找不到你定义的域名。
两步必须同时做:
- 在
/etc/apache2/extra/httpd-vhosts.conf中添加完整<VirtualHost>块,包含ServerName、DocumentRoot、<Directory> - 在
/etc/hosts中加一行:127.0.0.1 myapp.test(域名必须和ServerName一致) - 确认
httpd.conf中已取消注释:Include /private/etc/apache2/extra/httpd-vhosts.conf - 重启服务用
sudo apachectl restart,不是start或graceful
Mac 自带 Apache 的 PHP 模块名容易写错
macOS 不同版本预装的 PHP 模块名不同,硬写 libphp5.so 或 libphp7.so 会启动失败,报错类似:Cannot load modules/libphp.so into server。
先查清当前系统实际模块名:
ls /usr/libexec/apache2/libphp*
常见情况:
- macOS Sonoma (14.x) 及更新:通常为
libphp.so - macOS Monterey (12.x):可能是
libphp81.so或libphp82.so - 编辑
/etc/apache2/httpd.conf,只取消对应那一行的注释,例如:LoadModule php_module libexec/apache2/libphp.so - 同时补上这两行(否则
.php文件不解析):AddType application/x-httpd-php .phpDirectoryIndex index.php index.html
复杂点在于:Laravel 5.8 要求 PHP ≥ 7.1.3,但 macOS 自带 PHP 版本可能过低或缺失 mbstring、openssl 等扩展——这时别硬调自带 Apache,换用 Valet 或 Docker 更省事。


















