在Discuz!更换域名后缓存未完全更新的问题,需要从多个层面排查,以下是完整的解决方案流程:
1. **核心配置文件检查**
- 修改`config/config_global.php`:
- $_G['siteurl'] = 'https://newdomain.com/'; // 注意结尾斜杠
- $_G['cookie']['cookiedomain'] = '.newdomain.com'; // 多级域名共用cookie
复制代码
2. **UCenter独立配置**
- 修改`uc_server/data/config.inc.php`:
- define('UC_API', 'https://newdomain.com/uc_server');
- // 同步检查UC_DBNAME等数据库配置是否正确
复制代码
3. **后台强制更新**
- 进入后台 → 工具 → 更新缓存(勾选所有选项)
- 全局 → 站点信息 → 站点URL二次确认
- 界面 → 导航设置 → 检查所有链接地址
4. **数据库深度清理(操作前务必备份)**
- 执行SQL查询:
- UPDATE pre_common_setting SET svalue = 'https://newdomain.com' WHERE skey = 'siteurl';
- UPDATE pre_common_cache SET cachekey = REPLACE(cachekey,'olddomain','newdomain');
- UPDATE pre_common_syscache SET cachekey = REPLACE(cachekey,'olddomain','newdomain');
复制代码
5. **模板系统排查**
- 检查所有模板文件(.htm):
- grep -rnw '/template/' -e 'olddomain.com'
复制代码
- 特别检查:
* header.htm中的LOGO链接
* footer.htm中的统计代码
* css_common.htm中的资源路径
6. **附件域名处理**
- 修改`config/config_global.php`添加:
- $_G['setting']['ftp']['attachurl'] = 'https://newdomain.com/attachments/';
复制代码
7. **进阶缓存处理**
- 清空缓存目录:
- rm -rf data/cache/* data/template/* data/threadcache/*
复制代码
- 如果使用OPcache:
8. **移动端特别处理**
- 检查`/api/mobile/`目录下的配置文件
- 更新`/data/appdata/default/apps.php`中的域名配置
9. **SEO相关设置**
- 后台 → 全局 → SEO设置 → 逐一检查各页面URL规则
- 更新sitemap.xml生成设置
10. **服务层清理**
- 重启PHP服务(清除OPcache)
- 如果有使用Redis/Memcached:
- redis-cli flushall
- echo 'flush_all' | nc localhost 11211
复制代码
**验证步骤:**
1. 使用无痕模式访问`https://newdomain.com/misc.php?mod=patch`
2. 检查返回的升级文件地址是否为新域名
3. 通过开发者工具查看Network请求,筛选"olddomain"关键字
4. 使用Discuz!内置诊断工具:
- admin.php?action=check&checkfile=true
复制代码
**常见遗漏点排查:**
- 用户自定义的DIY模块
- 第三方插件独立配置文件
- 邮件模板中的域名设置
- 跨应用通信配置(如果有多个Discuz!实例)
- 移动端独立模板的LOGO地址
按照上述流程逐步排查后,可确保所有缓存和配置项完全更新至新域名。如果仍存在个别残留,可根据具体报错位置进行定向清理。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。 |