在 Dedecms 中,“子网站”通常指的是主站与子站共用同一套程序和数据库,但在后台进行独立管理、前台拥有独立域名和内容的站点结构,这种模式也常被称为“站群系统”或“多站点管理”。

为什么需要使用子网站功能?
使用子网站功能主要有以下几个优点:
- 统一管理,降低成本:只需要安装一套程序,维护一个数据库,大大降低了服务器和人力维护成本。
- 权重共享:所有子站都共享主站的域名权重,有利于新子站的快速收录和排名。
- 资源复用:可以轻松共享会员系统、文章模型、产品模型、评论系统等,同时又能保持各子站内容的独立性。
- 品牌扩展:适合集团公司建立不同产品线、不同地区的独立网站,
a.company.com和b.company.com。
实现子网站的核心原理
DedeCMS 实现子网站的核心在于 index.php 的智能判断。
- 域名绑定:在
index.php文件中,通过$_SERVER['HTTP_HOST']获取用户访问的域名。 - 规则匹配:根据获取到的域名,去匹配预设好的站点规则。
- 变量定义:匹配成功后,动态定义一些关键的全局变量,
$cfg_cmspath:CMS 的安装目录。$cfg_indexurl:首页地址。$cfg_mainsite:主站的域名。- 最重要的是,定义一个代表当前站点的变量,如
$siteid。
- 数据库隔离:通过
$siteid变量,在查询数据库时动态附加WHERE条件,确保每个子站只调用属于自己的数据,在查询文章时,会加上and typeid in (select id from dede_arctype where siteid = '$siteid')这样的条件。 - 后台独立:在后台管理界面,系统会根据
$siteid来显示对应站点的内容,从而实现后台管理的独立性。
如何配置 Dedecms 子网站(详细步骤)
这里以最经典的“同一数据库,不同数据表前缀”为例进行说明,这是最稳定、最推荐的方式。
前提条件:
- 一个已安装好的 Dedecms 主站。
- 一个支持子域名解析的域名(
yourdomain.com)。 - 一台可以配置虚拟主机或修改服务器配置(如 Nginx/Apache)的服务器。
步骤 1:准备数据库和程序
- 备份数据库:在进行任何操作前,务必备份你的主站数据库!
- 创建新数据表:
- 登录你的 PHPMyAdmin。
- 选择你的数据库。
- 找到主站的所有数据表,它们的前缀通常是
dede_。 - 手动复制这些表,并将前缀修改为新的,
dede2_,你需要复制以下核心表(根据你的模型增减):dede_archives(文章主表)dede_arctype(栏目表)dede_addonarticle(文章附加表,如果使用)dede_arcrank(文档等级表)dede_admin(管理员表,如果需要独立管理)dede_feedback(评论表)- ... 等等所有与你内容相关的表。
- 初始化新表数据:
- 将
dede_arctype(栏目表) 中的siteid字段全部更新为2(假设主站是1,子站是2)。 - 将
dede_archives(文章主表) 中对应新表的文章记录的siteid也更新为2。 - 将
dede_admin表中子站管理员的siteid也更新为2。
- 将
步骤 2:修改 index.php 文件
这是实现子网站功能最关键的一步。

- 打开你 Dedecms 根目录下的
index.php文件。 - 在
require_once(dirname(__FILE__)."/include/common.inc.php");这一行之前,添加如下代码:
<?php
// ----------------------------
// 织梦DedeCMS 子站点判断
// ----------------------------
if(!file_exists(dirname(__FILE__).'/data/common.inc.php'))
{
header('Location:install/index.php');
exit();
}
// 获取当前访问的域名
$host = $_SERVER['HTTP_HOST'];
// --- 在这里设置你的子站点规则 ---
// 格式: '子域名' => '站点ID'
$sites = array(
'www.yourdomain.com' => 1, // 主站
'sub.yourdomain.com' => 2, // 子站
// 可以继续添加更多子站
// 'news.yourdomain.com' => 3,
);
// 初始化站点ID
$siteid = 1; // 默认为主站
// 判断当前域名是否在规则中
if (isset($sites[$host])) {
$siteid = $sites[$host];
}
// 将站点ID写入全局变量
$GLOBALS['cfg_siteid'] = $siteid;
// 如果访问的是子域名,并且不是主域名,则进行相应处理
if ($siteid > 1) {
// 1. 定义站点相关的变量
$cfg_mainsite = 'www.yourdomain.com'; // 你的主域名
$cfg_cmspath = preg_replace("/^".$cfg_mainsite."/", $host, $cfg_cmsurl);
// 2. 如果需要,可以在这里重定向到子站点的首页
// header("Location: /");
// exit();
}
// ----------------------------
// 规则设置结束
// ----------------------------
?>
代码解释:
$sites数组是核心,键是子域名,值是对应的站点ID,你可以根据需要添加。$GLOBALS['cfg_siteid'] = $siteid;将站点ID设置为一个全局变量,供后续程序使用。
步骤 3:修改 include/common.inc.php 文件
这个文件负责连接数据库和加载站点配置。
- 打开
include/common.inc.php文件。 - 找到数据库连接配置部分,通常类似这样:
// 修改前 $cfg_dbhost = 'localhost'; $cfg_dbname = 'your_database_name'; $cfg_dbuser = 'your_username'; $cfg_dbpwd = 'your_password'; $cfg_dbprefix = 'dede_'; // 主站表前缀 $cfg_db_language = 'gbk';
修改为支持动态表前缀的代码:
// 修改后
$cfg_dbhost = 'localhost';
$cfg_dbname = 'your_database_name';
$cfg_dbuser = 'your_username';
$cfg_dbpwd = 'your_password';
// --- 动态表前缀设置 ---
$cfg_db_language = 'gbk';
// 获取站点ID
$siteid = isset($GLOBALS['cfg_siteid']) ? $GLOBALS['cfg_siteid'] : 1;
// 根据站点ID设置表前缀
if ($siteid == 1) {
$cfg_dbprefix = 'dede_'; // 主站
} elseif ($siteid == 2) {
$cfg_dbprefix = 'dede2_'; // 子站
}
// 可以继续添加更多站点
// elseif ($siteid == 3) {
// $cfg_dbprefix = 'dede3_'; // 另一个子站
// }
// --- 动态表前缀设置结束 ---
步骤 4:后台配置
- 登录后台:访问
yourdomain.com/dede,使用管理员账号登录。 - 系统基本参数设置:
- 进入【系统】-> 【系统基本参数】-> 【核心设置】。
- 找到 “站点路径” 和 “站点名称”,确保它们是动态的或者主站的设置。
- 保存。
- 添加子站点管理员(可选):
- 进入【系统】-> 【多站点管理】(如果你的版本有此功能)。
- 或者直接在【系统】-> 【SQL命令行工具】中执行SQL,为
dede_admin表添加一个新用户,并将其siteid字段设置为2,分配相应的权限。
- 清空缓存:在后台首页点击“清空所有缓存”。
步骤 5:服务器配置
为了让 sub.yourdomain.com 指向你的网站根目录,需要在服务器上进行配置。

