本文目录导读:

- 方案一:使用子目录(最简单,适用于共享主机)
- 方案二:使用子域名(推荐,大多数虚拟主机面板支持)
- 方案三:使用不同端口(特殊场景)
- 方案四:使用单入口路由(高级技巧,适用于框架)
- 核心建议列表
- 模拟真实部署场景(以最常见的Laravel/ThinkPHP为例)
在虚拟主机上部署多个PHP项目,核心需要解决两个问题:URL区分(如何访问不同的项目)和项目隔离(文件和数据互不干扰)。
根据你使用的虚拟主机类型(共享主机、VPS、或者是类似cPanel/宝塔的面板),具体的操作方式差异很大,以下是几种主流的部署方案:
使用子目录(最简单,适用于共享主机)
这是大多数廉价虚拟主机默认支持的方案,每个项目存放在根目录下的不同文件夹中。
-
目录结构示例:
/wwwroot/ (网站根目录,public_html) ├── project1/ (访问:http://你的域名/project1/) ├── project2/ (访问:http://你的域名/project2/) └── project3/ (访问:http://你的域名/project3/) -
操作步骤:
- 通过FTP或文件管理器,在网站根目录下创建
project1,project2等文件夹。 - 将各个项目的代码(包括
index.php)分别上传到对应的子文件夹内。 - 访问时通过路径区分:
http://你域名.com/project1/。
- 通过FTP或文件管理器,在网站根目录下创建
-
特别注意(伪静态问题):
- Laravel/ThinkPHP:这类框架通常需要将入口文件
index.php放在子目录下,并使用.htaccess规则。 - 解决方案:在
project1/.htaccess中,重写规则需要加上子目录路径。RewriteRule ^(.*)$ /project1/index.php [QSA,L]
- Laravel/ThinkPHP:这类框架通常需要将入口文件
-
优点:无需主机商额外配置,上手快。
-
缺点:
- URL 带有路径,不够美观。
- 所有项目共用PHP版本、PHP配置和数据库连接。
- 容易产生跨项目文件包含的安全风险。
使用子域名(推荐,大多数虚拟主机面板支持)
这是功能与成本平衡的最佳方案,每个项目绑定一个独立的子域名。
-
示例:
- 项目 A:
order.yourdomain.com-> 指向/wwwroot/order/ - 项目 B:
blog.yourdomain.com-> 指向/wwwroot/blog/ - 项目 C:
api.yourdomain.com-> 指向/wwwroot/api/
- 项目 A:
-
操作步骤(以cPanel或宝塔为例):
- 添加子域名:在主机控制面板中点击“子域名”或“域名绑定”。
- 设置目录:将
order.yourdomain.com的文档根目录直接指向你上传该项目的文件夹(public_html/order)。 - 上传代码:将项目文件上传到对应的目录中。
-
优点:
- URL简洁专业(
xxx.yourdomain.com)。 - 关键优势:有些面板(如宝塔)允许为不同的子域名设置不同的 PHP版本(如一个用PHP 7.4,另一个用PHP 8.2)。
- 目录完全隔离,安全性高。
- URL简洁专业(
-
缺点:需要先配置好DNS解析(如果是远程主机)。
使用不同端口(特殊场景)
如果你有一台轻量级服务器(VPS),且不想买域名或建多个域名。
-
示例:
http://服务器IP:8081-> 项目Ahttp://服务器IP:8082-> 项目B
-
操作方法:
- 修改Web服务器(Nginx/Apache)的配置文件,监听不同端口。
- 每个端口指向不同的网站目录。
-
优点:只需要一个IP,无需域名。
-
缺点:
- URL必须带端口号,不美观且不符合常规习惯。
- 防火墙可能需要额外放行端口。
- 比较少见,主要用于开发和测试环境。
使用单入口路由(高级技巧,适用于框架)
如果你只有一个域名,且所有项目都是同一个系统的模块(比如一个后端管理、一个API、一个前端展示),可以使用一个入口文件,通过路由分发到不同项目文件夹。
-
操作方法:
- 网站根目录下只放一个
index.php。 - 在
index.php中判断请求的URL前缀(如https://你的域名/api/或https://你的域名/admin/)。 - 根据前缀调用
require不同项目的启动文件。
- 网站根目录下只放一个
-
优点:极度简洁,只有一个站点配置。
-
缺点:
- 安全隐患高:一个项目出问题,所有项目都挂。
- 配置复杂:需要手动处理路由、SESSION隔离(不同项目的SESSION可能会互相覆盖)、文件路径隔离。
- 不推荐用于生产环境。
核心建议列表
- 如果是新手,使用共享主机:优先选择 方案二(子域名),如果主机商不支持子域名(现在很少),则退而求其次选 方案一(子目录)。
- 如果使用面板(如宝塔、AppNode):
- 直接在面板中添加“网站”。
- 每个网站绑定一个独立域名或子域名。
- 每个网站可以独立设置PHP版本、SSL证书。
- 这是最推荐的做法。
- 如果每个项目需要不同PHP版本:必须使用 方案二(子域名),因为虚拟主机下的子目录无法单独配置PHP版本。
模拟真实部署场景(以最常见的Laravel/ThinkPHP为例)
假设你的虚拟主机只提供一个 public_html 目录,且你只有 order.yourdomain.com 和 www.yourdomain.com 两个域名。
正确做法(遵循方案二):
- 在面板中创建两个网站:
www.yourdomain.com指向/www/wwwroot/www/(你想把Laravel项目放里面的子文件夹,如/www/wwwroot/www/laravel-project/,并设置运行目录为public)。order.yourdomain.com指向/www/wwwroot/order/(同理)。
错误做法(不要尝试如下):
- 把两个Laravel项目的所有文件直接混在同一个根目录下。
- 试图通过修改
.htaccess强行把domain.com/project1路由到另一个文件夹。
最简单的办法就是把每个项目当作一个独立的网站来配置,然后通过不同的子域名来访问,这是虚拟主机部署多项目最标准、最稳健的方式。