子域名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里加一行:
这样PHP会每次检查脚本是否更新,确保修改后的模板能立即生效。ini_set('opcache.revalidate_freq', 0);
按这些步骤一步步来,应该就能解决退出登录后电脑端显示旧内容的问题了。
内容的提问来源于stack exchange,提问作者MK12
相关产品推荐
相关产品推荐

