
宝塔面板里 Laravel 项目跑不起来,多半是 public 目录没设对
宝塔默认把网站根目录指向你上传的整个 Laravel 项目文件夹(比如 /www/wwwroot/myapp),但 Laravel 的入口其实是 public 子目录。直接这么配,index.php 找不到 vendor/autoload.php,立刻报错 Failed to open stream: No such file or directory。
实操建议:
- 在宝塔「网站」→「设置」→「网站目录」里,把「网站根目录」改成
/www/wwwroot/myapp/public(注意末尾的public) - 确保
.env文件已上传到项目根目录(即/www/wwwroot/myapp/.env),不是public下面 - 别点宝塔的「重载配置」,要手动点「SSL」或「伪静态」页签再点一次「保存」,它才会真正重写 Nginx 配置
Laravel 路由 404,检查宝塔是否开了伪静态
没开伪静态时,访问 /login 会直接 404,因为 Nginx 默认只认物理路径,不认识 Laravel 的路由规则。
实操建议:
- 在宝塔「网站」→「设置」→「伪静态」,选择
Laravel 5(别选 ThinkPHP 或其他) - 确认生成的规则里包含
try_files $uri $uri/ /index.php?$query_string;这一行 - 如果自己手写过规则,删掉重选——手写的常漏掉
$query_string,导致 GET 参数丢失
php artisan migrate 在宝塔里执行失败,权限和环境变量是主因
在宝塔终端里运行 php artisan migrate 报 SQLSTATE[HY000] [1045] Access denied,或者提示 Class 'App\Models\User' not found,基本是两个问题:数据库凭据没读到,或自动加载没刷新。
实操建议:
- 进宝塔终端前,先
cd /www/wwwroot/myapp,确保在项目根目录下操作 - 用
php -d memory_limit=-1 artisan migrate避免内存不足中断(尤其有大迁移时) - 改过
.env后,必须运行php artisan config:clear和php artisan cache:clear,否则旧配置还在内存里 - 宝塔终端默认用
www用户执行,确保storage和bootstrap/cache目录可写:chmod -R 755 storage bootstrap/cache
上线后 CSS/JS 404 或混合内容警告,检查 APP_URL 和 HTTPS 设置
页面能打开,但样式乱、控制台一堆 net::ERR_INSECURE_RESPONSE 或资源 404,大概率是 APP_URL 没配对,或用了 HTTP 链接却走 HTTPS 页面。
实操建议:
-
.env里APP_URL必须写完整协议和域名,比如https://myapp.com,不能只写myapp.com或http://myapp.com - 如果宝塔开了 SSL,Nginx 配置里要加
fastcgi_param HTTPS on;,否则 Laravel 判断不出当前是 HTTPS,生成的 URL 还是 http - 清浏览器缓存,
php artisan view:clear也跑一遍,避免 Blade 缓存了旧链接
最麻烦的其实是 .env 文件权限和部署时被忽略——它既不能 777(安全风险),也不能 600(web 服务器读不到),推荐 644,且确认宝塔没把它当成“隐藏文件”自动过滤掉。










