关键在于每个项目独立锁定laravel版本与依赖:在composer.json中明确指定"laravel/framework"版本范围(如"^7.30"或"8.40.0"),通过composer严格解析;统一校验php及扩展版本;开发依赖用--dev安装;.env文件须置于各自项目根目录;web服务器需单独配置指向public/目录。

同一台机器上运行多个 Laravel 项目,关键不是“装一次全局框架”,而是让每个项目独立锁定自己的版本、依赖和环境。核心原则是:不共享框架本体,靠 Composer 精确约束,靠环境隔离防干扰。
版本约束必须写死在 composer.json 里
别依赖全局 Laravel 安装——它根本不存在。每个项目的 composer.json 中的 "laravel/framework" 字段必须明确指定范围,例如:
-
"^7.30":只允许 7.x 的补丁和小版本升级,不会升到 8.x -
"~8.5.0":允许 8.5.x 内的更新,但跨小版本(如 8.6.0)也不行 -
"8.40.0":完全锁定固定版本,最稳妥,适合长期维护的老项目
执行 composer install 时,Composer 会严格按这个约束解析,哪怕本地有其他版本的缓存也不会误用。
PHP 和扩展版本要统一校验
不同 Laravel 版本对 PHP 和扩展有硬性要求,混用会导致 Class not found 或安装直接失败:
- Laravel 7.x:最低 PHP 7.2.5,需
mbstring、openssl、pdo、tokenizer - Laravel 8.x:最低 PHP 7.3,推荐 8.0+;
xml、ctype、json必须启用 - Laravel 11+:强制 PHP ≥ 8.2,
opcache建议开启,pcntl若用队列也得装
用 php -v 和 php -m | grep mbstring 分别检查 CLI 和 Web 服务(如 php-fpm)使用的 PHP 是否一致,避免“命令行能跑,网页报错”。
开发依赖要严格区分环境
像 fruitcake/laravel-debugbar 这类调试工具,必须用 --dev 安装:
-
composer require fruitcake/laravel-debugbar --dev→ 写入require-dev,上线部署时自动跳过 - 老项目若还在用
barryvdh/laravel-debugbar,先composer remove barryvdh/laravel-debugbar --dev --no-scripts,再装新包,避免脚本执行失败 - 所有
.env文件必须放在各自项目根目录(public上一级),不能共用或放错位置,否则APP_KEY读不到,php artisan key:generate也无效
Web 服务器配置不能跨项目复用
每个项目必须单独配置 Web 服务,指向各自的 public/ 目录,并启用重写规则:
- Nginx:
root /var/www/project-a/public;,且try_files $uri $uri/ /index.php?$query_string;不可省略 - Apache:确保
.htaccess在public/下生效,AllowOverride All已开启,mod_rewrite已加载 - 共享主机常见坑:把整个项目上传到
public_html而不是仅public/内容,结果路由全 404;正确做法是将public/内容放进public_html,其余文件(app/、vendor/、.env)放到上层不可访问目录











