PHP项目虚拟主机如何部署多个PHP项目

wen PHP项目 27

本文目录导读:

PHP项目虚拟主机如何部署多个PHP项目

  1. 方案一:使用子目录(最简单,适用于共享主机)
  2. 方案二:使用子域名(推荐,大多数虚拟主机面板支持)
  3. 方案三:使用不同端口(特殊场景)
  4. 方案四:使用单入口路由(高级技巧,适用于框架)
  5. 核心建议列表
  6. 模拟真实部署场景(以最常见的Laravel/ThinkPHP为例)

在虚拟主机上部署多个PHP项目,核心需要解决两个问题:URL区分(如何访问不同的项目)和项目隔离(文件和数据互不干扰)。

根据你使用的虚拟主机类型(共享主机、VPS、或者是类似cPanel/宝塔的面板),具体的操作方式差异很大,以下是几种主流的部署方案:

使用子目录(最简单,适用于共享主机)

这是大多数廉价虚拟主机默认支持的方案,每个项目存放在根目录下的不同文件夹中。

  • 目录结构示例

    /wwwroot/           (网站根目录,public_html)
        ├── project1/   (访问:http://你的域名/project1/)
        ├── project2/   (访问:http://你的域名/project2/)
        └── project3/   (访问:http://你的域名/project3/)
  • 操作步骤

    1. 通过FTP或文件管理器,在网站根目录下创建 project1, project2 等文件夹。
    2. 将各个项目的代码(包括 index.php)分别上传到对应的子文件夹内。
    3. 访问时通过路径区分:http://你域名.com/project1/
  • 特别注意(伪静态问题)

    • Laravel/ThinkPHP:这类框架通常需要将入口文件 index.php 放在子目录下,并使用 .htaccess 规则。
    • 解决方案:在 project1/.htaccess 中,重写规则需要加上子目录路径。
      RewriteRule ^(.*)$ /project1/index.php [QSA,L]
  • 优点:无需主机商额外配置,上手快。

  • 缺点

    • URL 带有路径,不够美观。
    • 所有项目共用PHP版本、PHP配置和数据库连接。
    • 容易产生跨项目文件包含的安全风险。

使用子域名(推荐,大多数虚拟主机面板支持)

这是功能与成本平衡的最佳方案,每个项目绑定一个独立的子域名。

  • 示例

    • 项目 A:order.yourdomain.com -> 指向 /wwwroot/order/
    • 项目 B:blog.yourdomain.com -> 指向 /wwwroot/blog/
    • 项目 C:api.yourdomain.com -> 指向 /wwwroot/api/
  • 操作步骤(以cPanel或宝塔为例)

    1. 添加子域名:在主机控制面板中点击“子域名”或“域名绑定”。
    2. 设置目录:将 order.yourdomain.com 的文档根目录直接指向你上传该项目的文件夹(public_html/order)。
    3. 上传代码:将项目文件上传到对应的目录中。
  • 优点

    • URL简洁专业(xxx.yourdomain.com)。
    • 关键优势:有些面板(如宝塔)允许为不同的子域名设置不同的 PHP版本(如一个用PHP 7.4,另一个用PHP 8.2)。
    • 目录完全隔离,安全性高。
  • 缺点:需要先配置好DNS解析(如果是远程主机)。

使用不同端口(特殊场景)

如果你有一台轻量级服务器(VPS),且不想买域名或建多个域名。

  • 示例

    • http://服务器IP:8081 -> 项目A
    • http://服务器IP:8082 -> 项目B
  • 操作方法

    1. 修改Web服务器(Nginx/Apache)的配置文件,监听不同端口。
    2. 每个端口指向不同的网站目录。
  • 优点:只需要一个IP,无需域名。

  • 缺点

    • URL必须带端口号,不美观且不符合常规习惯。
    • 防火墙可能需要额外放行端口。
    • 比较少见,主要用于开发和测试环境。

使用单入口路由(高级技巧,适用于框架)

如果你只有一个域名,且所有项目都是同一个系统的模块(比如一个后端管理、一个API、一个前端展示),可以使用一个入口文件,通过路由分发到不同项目文件夹。

  • 操作方法

    1. 网站根目录下只放一个 index.php
    2. index.php 中判断请求的URL前缀(如 https://你的域名/api/https://你的域名/admin/)。
    3. 根据前缀调用 require 不同项目的启动文件。
  • 优点:极度简洁,只有一个站点配置。

  • 缺点

    • 安全隐患高:一个项目出问题,所有项目都挂。
    • 配置复杂:需要手动处理路由、SESSION隔离(不同项目的SESSION可能会互相覆盖)、文件路径隔离。
    • 不推荐用于生产环境。

核心建议列表

  • 如果是新手,使用共享主机:优先选择 方案二(子域名),如果主机商不支持子域名(现在很少),则退而求其次选 方案一(子目录)
  • 如果使用面板(如宝塔、AppNode)
    1. 直接在面板中添加“网站”。
    2. 每个网站绑定一个独立域名或子域名。
    3. 每个网站可以独立设置PHP版本、SSL证书。
    4. 这是最推荐的做法。
  • 如果每个项目需要不同PHP版本:必须使用 方案二(子域名),因为虚拟主机下的子目录无法单独配置PHP版本。

模拟真实部署场景(以最常见的Laravel/ThinkPHP为例)

假设你的虚拟主机只提供一个 public_html 目录,且你只有 order.yourdomain.comwww.yourdomain.com 两个域名。

正确做法(遵循方案二)

  1. 在面板中创建两个网站:
    • www.yourdomain.com 指向 /www/wwwroot/www/(你想把Laravel项目放里面的子文件夹,如 /www/wwwroot/www/laravel-project/,并设置运行目录为 public)。
    • order.yourdomain.com 指向 /www/wwwroot/order/(同理)。

错误做法(不要尝试如下)

  • 把两个Laravel项目的所有文件直接混在同一个根目录下。
  • 试图通过修改 .htaccess 强行把 domain.com/project1 路由到另一个文件夹。

最简单的办法就是把每个项目当作一个独立的网站来配置,然后通过不同的子域名来访问,这是虚拟主机部署多项目最标准、最稳健的方式。

抱歉,评论功能暂时关闭!