跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

phpEnv环境下部署DedeCMS多站点管理配置

phpEnv下DedeCMS单安装多站点风险极高,因cfg_multi_site为伪多站机制,易致URL错乱、图片路径失效、后台异常且无法升级;唯一可行方案是各站点独立部署,彻底隔离目录与数据库。 phpEnv 环境下直接复用 DedeCMS 单安装实现多站点,风险远大于收益——它不是设计来干这事的,硬改会导致 URL 生成错乱、图片路径失效、后台功能异常,且后续升级几乎不可能。 为什么 phpEnv + DedeCMS 单安装多站点会出问题 phpEnv 是轻量级集成环境,本身不干预 Web 应用逻辑,但 DedeCMS 的多站点支持(
cfg_multi_site
)本质是“伪多站”:它依赖域名识别 + 手动栏目绑定 + 大量硬编码路径替换。在 phpEnv 这类共享 Apache/Nginx 配置的环境下,容易出现:
cfg_basehost
和
cfg_cmspath
在不同子站间冲突,导致后台跳转错乱 修改
/include/helpers/channelunit.helper.php
后,
GetFileUrl()
函数对非根目录子站(如
http://sub1.local/heli/
)仍无法正确剥离路径前缀
select_images_post.php
中的
$cfg_cmsurl
取值不随域名动态变化,上传图片后 src 仍是主站地址 phpEnv 默认的 Apache 虚拟主机配置未启用
NameVirtualHost
或未隔离
DocumentRoot
,多个二级域名实际指向同一物理目录,权限和日志混在一起 真正可行的 phpEnv 多站点方案:每个站点独立部署 这不是偷懒,而是唯一能长期稳定运行的方式。phpEnv 支持开多个 Apache 实例或共用一个实例但划分不同虚拟主机,关键在于目录和数据库彻底隔离: 为每个站点创建独立子目录,例如:
D:\phpenv\www\site-a\
、
D:\phpenv\www\site-b\
用 phpEnv 自带的 MySQL 管理页,为每个站点新建数据库(如
dede_sitea
、
dede_siteb
)及对应用户,避免表前缀混淆 复制一份干净的 DedeCMS 安装包到各子目录,分别执行安装向导(不要跳过,确保
data/common.inc.php
写入正确的库名、用户、密码) 在 phpEnv 的 Apache 配置中启用
httpd-vhosts.conf
,为每个站点添加独立
块,指定
DocumentRoot
和
ServerName
(如
site-a.local
) 修改系统 hosts 文件(
C:\Windows\System32\drivers\etc\hosts
),把各测试域名映射到
127.0.0.1
必须改的三个文件位置(仅限单安装强行多站场景) 如果你已决定冒险走单安装路线,以下三处修改不可跳过,否则连首页都打不开: PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。 下载 立即学习 “ PHP免费学习笔记(深入) ”;
/include/helpers/channelunit.helper.php
中的
GetFileUrl()
函数:第73行和第260行左右的
preg_replace()
必须把正则分隔符从
/
换成
'
,否则当
$sitepath
含斜杠时直接报 PHP 编译错误;原写法
"/^".$sitepath.'/'
→ 改为
"'^".$sitepath."'"
/include/dialog/select_images_post.php
第108行:
$fileurl = $activepath.'/'.$filename;
→ 改为
$fileurl = $cfg_cmsurl.$activepath.'/'.$filename;
,否则上传图片返回的是相对路径,前端加载 404
/include/extend.func.php
末尾追加函数:
function replaceurl($newurl) { return str_replace('src="https://www.vqhf.com/uploads/', 'src="'. $GLOBALS['cfg_basehost'] .'/uploads/', $newurl); }
,并在模板中把
{dede:field.body/}
全部替换成
{dede:field.body function='replaceurl(@me)'/}
最容易被忽略的细节:Apache 虚拟主机配置顺序 phpEnv 的 Apache 默认加载
httpd.conf
里的
Include conf/extra/httpd-vhosts.conf
,但很多用户只加了
块,却忘了在最顶部加上:
NameVirtualHost *:80
没有这句,Apache 会把所有请求都路由给第一个定义的虚拟主机,后面配置的
ServerName
全部失效。另外,每个
块内必须显式声明
ServerAlias
(如
www.site-a.local
),否则带 www 的访问会 404。

相关文章