我们在迁移 WordPress 网站时遇到了一个非常奇怪的问题:网站迁移到新服务器后,访问时却跳转到了同服务器的另一个 WordPress 网站! 经过深入排查,最终发现问题的根源是 Redis 缓存冲突。为了让更多 WordPress 从业者避免踩坑,整理了这篇文章,详细介绍问题的表现、原因分析以及最终的解决方案。
我的 WordPress 网站(em8.cn)从 A 服务器迁移到了 B 服务器,而 B 服务器上已经运行了另一个 WordPress 网站(emnn.net)。迁移完成后,意外发现:
em8.cn
的时候,会自动跳转到 B 服务器上的另一个网站emnn.net(即 B 服务器原有的 WordPress 站点)。em8.cn
的数据库和文件都是正确的,域名解析也没有问题。.htaccess
和 wp-config.php
,问题仍然存在。经过深入分析,发现 Redis 缓存是罪魁祸首!
Redis 是一个高性能的缓存数据库,WordPress 站点通常会使用 Redis 缓存插件(如 Redis Object Cache
)来提高运行速度。然而,如果 同一台服务器上的多个 WordPress 站点共用了相同的 Redis 实例,而没有设置独立的缓存前缀,就会导致缓存数据混淆,从而出现以下问题:
✅ 缓存数据共享:
不同 WordPress 站点的页面、查询、对象等数据被存储在相同的 Redis 缓存中,相互覆盖,导致访问 A 网站时可能会加载 B 网站的缓存数据。
✅ 站点 URL 被缓存:
WordPress 会在 Redis 中缓存 siteurl
和 home
选项,如果缓存未隔离,访问 em8.cn
时可能会错误加载到 B 服务器上另一个 WordPress 网站的 URL。
wp-config.php
以设置唯一的缓存前缀为了防止缓存混淆,我们需要在 wp-config.php
文件中为每个 WordPress 站点设置独立的 Redis 缓存前缀,具体操作如下:
wp-config.php
文件:
wp-config.php
并用编辑器打开。WP_CACHE_KEY_SALT
的值):define('WP_CACHE_KEY_SALT', 'em8_cn_'); // 为当前网站设置Redis缓存前缀
对于 B 服务器上的另一个网站,也需要修改其 wp-config.php
,但要使用不同的前缀,例如:
define('WP_CACHE_KEY_SALT', 'emnn_net_');
这样,两个 WordPress 站点在 Redis 中的缓存数据就不会混淆了。
修改 wp-config.php
后,我们需要清理 Redis 以删除旧的错误缓存。
👉 方法 1:使用 Redis CLI 命令清空缓存
redis-cli FLUSHALL
这将清空 Redis 中的所有缓存数据(⚠️ 注意:如果 Redis 也被其他应用使用,请谨慎执行)。
👉 方法 2:在 WordPress 后台清除 Redis 缓存
Redis Object Cache
插件,可以在 WordPress 后台 【设置】->【Redis】-> 点击 “Flush Cache” 清除缓存。修改 wp-config.php
并清理缓存后,建议重启 Redis 和 Web 服务器,使更改生效:
sudo systemctl restart redis<br /> sudo systemctl restart nginx # 如果使用 Nginx<br /> sudo systemctl restart apache2 # 如果使用 Apache
em8.cn
,确认不再跳转到 B 服务器上的另一个网站。🚀 至此,问题已经成功解决!
如果你的 WordPress 网站在迁移后遇到 自动跳转到同服务器的另一个网站,大概率是 Redis 缓存冲突 引起的。解决办法是:
✅ 为每个 WordPress 站点配置独立的 Redis 缓存前缀(修改 wp-config.php
)。
✅ 清空 Redis 缓存,避免加载旧的站点 URL。
✅ 重启 Redis 和 Web 服务器,使修改生效。
希望这篇文章能帮助到有类似问题的 WordPress 站长! 🎉🚀