Apache部署Laravel需确保DocumentRoot指向public目录、启用mod_rewrite模块、在Directory块中设置AllowOverride All、Require all granted,并正确生成APP_KEY及设置storage权限,错误日志是排错关键。

.htaccess 没生效、AllowOverride 没开、或者 mod_rewrite 根本没启用。只要踩准这几点,Apache 部署 Laravel 和跑一个静态页面一样直白。
Apache 虚拟主机 DocumentRoot 必须指向 public 目录
这是最常翻车的第一步。Laravel 的入口是 public/index.php,不是项目根目录下的 index.php。如果 DocumentRoot 写成 /var/www/myapp,Apache 会直接暴露 .env、app/、config/ 等敏感目录,还可能报 403 或 500。
-
DocumentRoot正确值应为/var/www/myapp/public - 对应
<directory></directory>块也要同步改成/var/www/myapp/public - Windows 下路径用正斜杠(
E:/myapp/public),别用反斜杠,Apache 会解析失败
AllowOverride All 必须显式开启,且 mod_rewrite 已加载
Laravel 的路由重写依赖 .htaccess,而 Apache 默认禁止该文件生效。光有 .htaccess 文件没用,必须让 Apache 允许它覆盖配置。
- 检查
a2enmod rewrite是否执行过;没执行就运行一次 - 在虚拟主机的
<directory></directory>块里,确认写了AllowOverride All(不是None,也不是注释掉) - 如果用了
Require all denied这类旧写法,要换成Require all granted(Apache 2.4+) - 改完配置后必须
sudo systemctl reload apache2,restart也行,但reload更轻量
APP_KEY 未生成或 .env 权限错误会导致 500
部署后打开首页只显示空白页或 500 错误,大概率不是 Apache 配置问题,而是 Laravel 自身启动失败。
- 先确认
.env文件存在,且APP_KEY不是base64:开头的占位符(比如APP_KEY=base64:...是 Laravel 安装器没跑成功的标志) - 进项目根目录手动执行:
php artisan key:generate --force - 检查
storage/和bootstrap/cache/目录权限:Apache 用户(如www-data)必须有读写权,chmod -R 775 storage bootstrap/cache可解燃眉之急 - 别把
.env设成 644 以外的权限——600 有时会让 PHP 读不到,尤其在某些 SELinux 或严格 umask 环境下
Apache 日志是唯一可信的排错依据
浏览器看到的 500、404、空白页全是表象。真实原因全在 Apache 错误日志里,别猜。
- 默认路径是
/var/log/apache2/error.log(Ubuntu/Debian)或/var/log/httpd/error_log(CentOS/RHEL) - 部署出问题时,第一反应不是刷新页面,而是
tail -f /var/log/apache2/error.log - 常见线索包括:
PHP Fatal error: Uncaught RuntimeException: The only supported ciphers are ...(mbstring或openssl扩展缺失)、file_put_contents(...): failed to open stream: Permission denied(storage权限问题)


















