如何在多站点虚拟主机的指定子目录部署Laravel 5.5项目
在PHP 7.1.x虚拟主机的子目录部署Laravel 5.5的实操方案
我最近在一台运行PHP 7.1.x版本的虚拟主机上部署Laravel 5.5项目,这台服务器已经托管了3个WordPress站点,通过FTP连接后看到的初始目录结构是这样的:
- WEBSITE NUMBER 1 —— 存放WordPress完整文件
- WEBSITE NUMBER 2 —— 存放WordPress完整文件
- WEBSITE NUMBER 3 —— 存放WordPress完整文件
我的需求是让Laravel项目运行在www.WEBSITENUMBER3.com/app/这个子目录下,所以已经在WEBSITE NUMBER 3的同级位置新建了两个文件夹(用于存放Laravel核心文件,目前内容还未完全上传),现在的目录结构大概是:
- WEBSITE NUMBER 1 —— WordPress文件
- WEBSITE NUMBER 2 —— WordPress文件
- WEBSITE NUMBER 3 —— WordPress文件
- laravel-core —— 待上传Laravel核心文件(如app、bootstrap、config等)
- (另一个辅助文件夹,按需使用)
针对这个场景,我整理了一套可行的部署步骤,适配虚拟主机多站点且无法修改根目录指向的情况:
1. 调整Laravel目录结构
虚拟主机通常不允许修改站点根目录的指向,所以我们需要拆分Laravel的文件:
- 把Laravel项目中的
public目录下的所有文件,上传到WEBSITE NUMBER 3的app子目录中(也就是www.WEBSITENUMBER3.com/app/对应的服务器目录); - 把Laravel的核心文件(包括app、bootstrap、config、database、vendor等目录,以及.env、artisan等文件)上传到同级的
laravel-core文件夹中,避免这些敏感文件暴露在Web根目录下。
2. 修改public/index.php的路径引用
打开要放到app目录里的index.php文件,修改其中的自动加载和应用初始化路径,让它指向我们放在同级的laravel-core文件夹:
// 原路径 // require __DIR__.'/../vendor/autoload.php'; // $app = require_once __DIR__.'/../bootstrap/app.php'; // 修改后的路径(根据实际目录层级调整) require __DIR__.'/../../laravel-core/vendor/autoload.php'; $app = require_once __DIR__.'/../../laravel-core/bootstrap/app.php';
3. 配置.htaccess实现URL重写
在WEBSITE NUMBER 3的app目录中创建或修改.htaccess文件,添加Laravel的重写规则,确保所有请求都转发到index.php:
<IfModule mod_rewrite.c> <IfModule mod_negotiation.c> Options -MultiViews -Indexes </IfModule> RewriteEngine On # 处理授权头信息 RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] # 移除URL末尾的斜杠(非文件夹请求) RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_URI} (.+)/$ RewriteRule ^ %1 [L,R=301] # 所有非文件/文件夹的请求都转发到index.php RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] </IfModule>
4. 配置环境变量(.env文件)
- 把
laravel-core文件夹中的.env.example复制为.env; - 修改关键配置项:
- 设置
APP_URL=http://www.WEBSITENUMBER3.com/app; - 根据虚拟主机提供的数据库信息,填写
DB_HOST、DB_PORT、DB_DATABASE、DB_USERNAME、DB_PASSWORD; - 确保
APP_KEY已生成:如果虚拟主机没有CLI权限,建议在本地运行php artisan key:generate,然后把生成的密钥复制到.env的APP_KEY字段中。
- 设置
5. 设置文件权限
确保laravel-core文件夹下的storage和bootstrap/cache目录具备可写权限,一般设置为755或775(具体根据虚拟主机的用户组配置调整,避免设置成777带来安全风险)。
6. 测试部署
完成所有文件上传和配置后,访问www.WEBSITENUMBER3.com/app,如果能看到Laravel的默认欢迎页面,就说明部署成功;如果遇到错误,可以优先检查以下几点:
index.php中的路径是否正确;storage和bootstrap/cache的权限是否设置到位;.env文件中的配置是否准确。
内容的提问来源于stack exchange,提问作者Lorenzo Di Giacomo
相关产品推荐
相关产品推荐

