凌峰创科服务平台

DedeCms子网站如何创建与管理?

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

DedeCms子网站如何创建与管理?-图1
(图片来源网络,侵删)

为什么需要使用子网站功能?

使用子网站功能主要有以下几个优点:

  1. 统一管理,降低成本:只需要安装一套程序,维护一个数据库,大大降低了服务器和人力维护成本。
  2. 权重共享:所有子站都共享主站的域名权重,有利于新子站的快速收录和排名。
  3. 资源复用:可以轻松共享会员系统、文章模型、产品模型、评论系统等,同时又能保持各子站内容的独立性。
  4. 品牌扩展:适合集团公司建立不同产品线、不同地区的独立网站,a.company.comb.company.com

实现子网站的核心原理

DedeCMS 实现子网站的核心在于 index.php 的智能判断。

  1. 域名绑定:在 index.php 文件中,通过 $_SERVER['HTTP_HOST'] 获取用户访问的域名。
  2. 规则匹配:根据获取到的域名,去匹配预设好的站点规则。
  3. 变量定义:匹配成功后,动态定义一些关键的全局变量,
    • $cfg_cmspath:CMS 的安装目录。
    • $cfg_indexurl:首页地址。
    • $cfg_mainsite:主站的域名。
    • 最重要的是,定义一个代表当前站点的变量,如 $siteid
  4. 数据库隔离:通过 $siteid 变量,在查询数据库时动态附加 WHERE 条件,确保每个子站只调用属于自己的数据,在查询文章时,会加上 and typeid in (select id from dede_arctype where siteid = '$siteid') 这样的条件。
  5. 后台独立:在后台管理界面,系统会根据 $siteid 来显示对应站点的内容,从而实现后台管理的独立性。

如何配置 Dedecms 子网站(详细步骤)

这里以最经典的“同一数据库,不同数据表前缀”为例进行说明,这是最稳定、最推荐的方式。

前提条件:

  • 一个已安装好的 Dedecms 主站。
  • 一个支持子域名解析的域名(yourdomain.com)。
  • 一台可以配置虚拟主机或修改服务器配置(如 Nginx/Apache)的服务器。

步骤 1:准备数据库和程序

  1. 备份数据库:在进行任何操作前,务必备份你的主站数据库!
  2. 创建新数据表
    • 登录你的 PHPMyAdmin。
    • 选择你的数据库。
    • 找到主站的所有数据表,它们的前缀通常是 dede_
    • 手动复制这些表,并将前缀修改为新的,dede2_,你需要复制以下核心表(根据你的模型增减):
      • dede_archives (文章主表)
      • dede_arctype (栏目表)
      • dede_addonarticle (文章附加表,如果使用)
      • dede_arcrank (文档等级表)
      • dede_admin (管理员表,如果需要独立管理)
      • dede_feedback (评论表)
      • ... 等等所有与你内容相关的表。
  3. 初始化新表数据
    • dede_arctype (栏目表) 中的 siteid 字段全部更新为 2(假设主站是 1,子站是 2)。
    • dede_archives (文章主表) 中对应新表的文章记录的 siteid 也更新为 2
    • dede_admin 表中子站管理员的 siteid 也更新为 2

步骤 2:修改 index.php 文件

这是实现子网站功能最关键的一步。

DedeCms子网站如何创建与管理?-图2
(图片来源网络,侵删)
  1. 打开你 Dedecms 根目录下的 index.php 文件。
  2. 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 文件

这个文件负责连接数据库和加载站点配置。

  1. 打开 include/common.inc.php 文件。
  2. 找到数据库连接配置部分,通常类似这样:
// 修改前
$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:后台配置

  1. 登录后台:访问 yourdomain.com/dede,使用管理员账号登录。
  2. 系统基本参数设置
    • 进入【系统】-> 【系统基本参数】-> 【核心设置】。
    • 找到 “站点路径” 和 “站点名称”,确保它们是动态的或者主站的设置。
    • 保存。
  3. 添加子站点管理员(可选)
    • 进入【系统】-> 【多站点管理】(如果你的版本有此功能)。
    • 或者直接在【系统】-> 【SQL命令行工具】中执行SQL,为 dede_admin 表添加一个新用户,并将其 siteid 字段设置为 2,分配相应的权限。
  4. 清空缓存:在后台首页点击“清空所有缓存”。

步骤 5:服务器配置

为了让 sub.yourdomain.com 指向你的网站根目录,需要在服务器上进行配置。

DedeCms子网站如何创建与管理?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇