Laravel 12可部署,但需PHP≥8.2、启用mbstring等必需扩展、支持Composer与重写规则,且Web根目录必须指向public/、storage和bootstrap/cache需可写、.env须禁止HTTP访问。

可以部署 Laravel 12,但需满足明确的运行环境要求和正确的虚拟主机配置,否则会报错、白屏或路由失效。
Laravel 12(2024年发布)对底层环境要求更高,不是所有“能跑 PHP”的虚拟主机都支持。关键看三点:PHP 版本与扩展、Web 服务器权限控制能力、文件系统写入权限。
✅ 虚拟主机必须满足的硬性条件
-
PHP ≥ 8.2(官方最低要求),推荐 8.3+
Laravel 12 移除了对 PHP 8.1 的支持,若主机只提供 PHP 8.0 或 8.1,无法安装或启动。 -
必需扩展已启用:
mbstring、openssl、pdo、tokenizer、xml、ctype、json、bcmath、curl、zip、fileinfo
缺一不可,尤其mbstring和tokenizer常被共享主机默认禁用。 -
支持 Composer 安装与执行
部署通常需在服务器终端运行composer install(或上传已composer install好的vendor/)。纯控制面板式虚拟主机若不开放 SSH 或命令行,基本无法完成部署。 -
允许重写规则(Rewrite)
Apache 需支持.htaccess+mod_rewrite;Nginx 需允许自定义server块或location规则。很多廉价虚拟主机仅支持 Apache 且禁用AllowOverride All,导致路由 404。
⚠️ 常见虚拟主机类型适配情况
| 类型 | 是否可行 | 说明 |
|---|---|---|
| 阿里云/腾讯云共享虚拟主机(如万网老版) | ❌ 极大概率失败 | 不支持 getenv()、无 SSH、PHP 版本老旧(多为 7.4/8.0)、禁用 proc_open 和符号链接,Laravel 12 无法初始化 |
| VPS / 独立服务器(Ubuntu/CentOS) | ✅ 完全可行 | 可自主安装 PHP 8.3+FPM、Nginx/Apache、配置 root 指向 public/,权限与重写完全可控 |
| 支持 SSH + 自定义 Nginx/Apache 的云虚拟主机(如 Vultr、DigitalOcean Droplet、宝塔面板服务器) | ✅ 推荐方案 | 可完整配置 try_files、fastcgi_param SCRIPT_FILENAME $realpath_root、禁止 .env 访问等安全项 |
| 本地集成环境(PHPStudy、XAMPP、MAMP) | ✅ 可用于开发调试 | 需手动开启 mod_rewrite(Apache)或配置 nginx.conf 的 location ~ \.php$ 块,注意 Windows 下路径斜杠与大小写 |
? 部署时必须做的 4 件事(缺一不可)
-
Web 根目录必须设为
public/
不是项目根目录(含app/、config/、.env),否则敏感文件直接暴露,且路由不生效。 -
重写规则必须兜底到
index.php
Apache:确认.htaccess存在且内容含RewriteRule ^(.*)$ index.php [L];Nginx:必须有try_files $uri $uri/ /index.php?$query_string; -
storage/和bootstrap/cache/目录需可写
Web 服务器用户(如www-data或nginx)必须拥有775或755写权限,否则日志、缓存、视图编译全部失败。 -
.env文件不能通过 HTTP 访问
Apache 加RedirectMatch 404 ^/\.env;Nginx 加location ~ /\.(env|git|htaccess) { deny all; }
? 小提示:验证是否真能跑 Laravel 12
上传一个最小检测脚本(如 phpinfo.php),检查:
Laravel Cloud(cloud.laravel.com)。此技能用于处理所有 Laravel Cloud 请求,包括搜索和读取数据。只要任务涉及 Laravel Cloud,即使用此技能。
-
PHP Version≥ 8.2 -
Loaded Configuration File路径下的php.ini中extension=mbstring.so等已启用 -
disable_functions未禁用exec、shell_exec、proc_open(Composer 和 Artisan 需要) -
open_basedir若启用,必须包含项目路径及/tmp
不复杂但容易忽略。










