You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

子域名WordPress站点迁移主域名根目录后缓存异常求助

解决WordPress迁移后缓存导致的内容不一致问题

咱们先理清楚状况:登录状态下WordPress会自动跳过页面级缓存,所以你能看到修改后的新内容;但退出登录后,电脑端就跳出旧文本,手机端正常——这大概率是多层级缓存冲突搞的鬼,手机端要么没存旧缓存,要么服务器/CDN对移动端的缓存策略不一样。下面是实打实的排查和解决步骤:

1. 把所有层级的缓存都清干净

只清WP缓存插件远远不够,还有好几层缓存要处理:

  • 浏览器缓存:电脑端按Ctrl + Shift + R(Windows/Linux)或Cmd + Shift + R(Mac)强制刷新,直接绕过本地缓存重新加载。要是还不行,就直接清空浏览器的“缓存的图片和文件”(别只清历史记录)。
  • 服务器端缓存:如果用的是Nginx或Apache,很多服务器自带缓存模块(比如Nginx的proxy_cache、Apache的mod_cache)。登录服务器后台,要么找到缓存配置清空,要么直接重启服务:
    # Nginx用户
    sudo systemctl restart nginx
    # Apache用户
    sudo systemctl restart apache2
    
  • CDN缓存:要是域名挂了CDN(比如Cloudflare、阿里云CDN),一定要去控制台手动清空全站缓存!很多CDN会默认缓存页面和静态资源,WP内部缓存清了也没用,CDN的旧缓存还会返回给用户。

2. 确认数据库里的旧内容全替换干净了

有时候只改了模板文本,但数据库里还藏着旧域名或旧内容:

  • 用WP-CLI工具一键替换最稳妥,先预览替换内容(不会真改):
    wp search-replace 'project1.com' 'project2.com' --skip-columns=guid --dry-run
    
    确认没问题后去掉--dry-run执行实际替换,--skip-columns=guid是为了保留文章的原始GUID(不需要的话可以去掉)。
  • 没有WP-CLI的话,用phpMyAdmin执行SQL语句(记得先备份数据库!):
    UPDATE wp_posts SET post_content = REPLACE(post_content, 'project1.com', 'project2.com');
    UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'project1.com', 'project2.com');
    

3. 检查缓存插件的细节设置

像WP Rocket、W3 Total Cache这类插件,有不少容易忽略的缓存选项:

  • 确认“针对登录用户不缓存”是开启的(这就是你登录能看到新内容的原因),但要检查未登录用户的缓存是否没更新。可以先临时禁用缓存插件,刷新页面看看是否正常——如果正常,就重新配置插件,打开“内容更新时自动清理缓存”的选项,或者缩短缓存过期时间。
  • 有些插件会分设备缓存(桌面/移动端),桌面端的旧缓存没清就会一直显示旧内容。去插件设置里找“设备缓存”相关选项,手动清空桌面端的缓存。

4. 给主题静态资源加版本号,强制浏览器更新

如果模板文本是写在主题的header.php、footer.php这类文件里,修改后浏览器可能因为缓存还加载旧版本:

  • 在主题的functions.php里加这段代码,给静态资源加上版本号:
    function my_theme_refresh_resources() {
        wp_enqueue_style( 'theme-style', get_stylesheet_uri(), array(), wp_get_theme()->get('Version') );
        wp_enqueue_script( 'theme-script', get_template_directory_uri() . '/js/main.js', array('jquery'), wp_get_theme()->get('Version'), true );
    }
    add_action( 'wp_enqueue_scripts', 'my_theme_refresh_resources' );
    
    之后每次修改主题,就去style.css顶部的Version字段改个版本号,浏览器就会自动加载最新的资源了。

5. 检查PHP的OPcache缓存

如果服务器开了PHP的OPcache,它会缓存PHP脚本的编译结果,导致修改后的模板没被重新加载:

  • 要么去服务器的PHP配置文件(比如php.ini)里设置opcache.revalidate_freq=0,然后重启PHP服务:
    sudo systemctl restart php-fpm
    
  • 要么临时在wp-config.php里加一行:
    ini_set('opcache.revalidate_freq', 0);
    
    这样PHP会每次检查脚本是否更新,确保修改后的模板能立即生效。

按这些步骤一步步来,应该就能解决退出登录后电脑端显示旧内容的问题了。

内容的提问来源于stack exchange,提问作者MK12

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:34:14