You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在多站点虚拟主机的指定子目录部署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文件)

  1. 把laravel-core文件夹中的.env.example复制为.env;
  2. 修改关键配置项:
    • 设置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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:43:16