Laravel项目上线核心是控制PHP版本、伪静态规则、目录权限和.env安全四要素:确保PHP≥8.1并启用指定扩展;Nginx指向public目录且配置Laravel伪静态;storage与bootstrap/cache设755可写;.env设APP_ENV=production、APP_DEBUG=false并执行缓存与迁移命令。

把Laravel项目从本地开发环境推到线上服务器并让网站可访问,核心是绕过宝塔面板的“一键部署”幻觉,直接控制PHP版本、伪静态规则、目录权限和.env安全这四个硬性开关。
确认PHP版本与扩展是否真正就位
登录宝塔后台→软件商店→找到已安装的PHP 8.1或8.2版本→点击设置→禁用所有非必要扩展→只启用:openssl、pdo_mysql、mbstring、tokenizer、xml、ctype、json、bcmath、fileinfo、opcache。
执行命令验证:php -m | grep -E "openssl|pdo|mbstring"——若返回空行,说明扩展未生效,必须重启PHP服务而非仅刷新页面。
【关键前提】 Nginx必须使用PHP-FPM模式,不能勾选“纯静态”,否则所有路由都会404。
站点创建与根目录精准指向
网站→添加站点→填写域名(如laravel.example.com)→根目录设为/www/wwwroot/laravel.example.com→PHP版本选刚确认过的8.1。
进入该站点的“根目录”按钮→打开文件管理器→删除默认的index.html→上传你的Laravel项目压缩包→解压到当前目录→确保public子目录存在且不为空。
在站点设置→网站目录→将“运行目录”改为/public——这一步漏掉会导致index.php被当作普通文件下载,而不是执行入口。
配置Nginx伪静态与PHP处理规则
方法一:直接套用宝塔内置规则
站点设置→伪静态→下拉选择“Laravel5”→保存。
方法二:手动覆盖规则(更可靠)
站点设置→配置文件→在location /区块内替换为以下内容:
location / { try_files $uri $uri/ /index.php?$query_string; }
location ~ \.php$ { fastcgi_pass unix:/www/server/php/81.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
注意检查fastcgi_pass路径中的PHP版本号(如81、82)是否与你实际安装的一致,错一个数字就会502。
修复目录权限与环境变量
第一步:设置storage与bootstrap/cache可写
文件管理器→进入/www/wwwroot/laravel.example.com→右键storage→权限→输入755→勾选“同时修改子目录文件权限”→确定。
同样操作处理bootstrap/cache目录。
第二步:编辑.env文件
双击.env→修改APP_ENV=production、APP_DEBUG=false、APP_URL=https://laravel.example.com→数据库参数按实际填写→保存。
【不可逆操作】 确保.env文件不在Web可访问路径下——宝塔默认已禁止,但若手动移动过目录,需检查Nginx配置中是否有location ~ /\.env屏蔽规则。
执行缓存与迁移命令
① 进入终端→切换到项目根目录:cd /www/wwwroot/laravel.example.com
② 生成密钥(若未生成):php artisan key:generate --force
③ 清除旧缓存:php artisan config:clear && php artisan cache:clear && php artisan view:clear
④ 构建生产级缓存:php artisan config:cache && php artisan route:cache && php artisan view:cache
⑤ 执行数据库迁移:php artisan migrate --force——加--force是因生产环境默认禁止自动迁移。


















