客户发来一张截图,地址栏还是旧域名,页面内容却是新的。域名换完,后台还能进,前台一点导航就跳回旧域名,有时候登录之后被弹回去,看着像账号权限出了问题,跑去翻用户角色,翻半天也翻不出原因,方向一开始就偏了。根源多半不在主题,也不在服务器配置,而在数据库里存着的那两个地址。但先确认一件事,wp-config.php里有没有写死WP_HOME或WP_SITEURL,写了的话常量优先,数据库改成什么都不生效,得先把这两行删掉或改掉。
两处都在wp_options表里,一个是siteurl,一个是home。改之前先确认表前缀,很多站装的时候把wp_换成了别的,按wp_前缀写语句会提示表不存在。后台设置里的常规选项也能改这两项,改完刷新一次页面,回wp_options确认两个值真的变了;装过对象缓存或CDN的,改完清一次缓存,否则前台读到的还是旧值。
只改这两处还不够。正文和自定义字段里还有硬编码的旧域名,wp_posts的post_content里最常见,主题选项里也常留着一份,小工具和菜单里偶尔也有。这些地方不一起换,前台总会有几个链接指向旧域名。
动手之前先整库备份,导出成文件放在本地。这一步花不了多少时间,回滚全靠它。有备份在手,才敢真的执行替换——先加--dry-run跑一遍,看会改哪些表,确认无误再去掉。
替换用WP-CLI的search-replace,或者用插件来做,它们会处理序列化数据。不能直接跑SQL全库UPDATE,序列化字符串带长度字段,替换后长度变了就对不上,设置项会整块丢掉,这种损坏不易察觉。
guid那一列也常被当成必改项。它不参与跳转,所以不会是跳回旧域名的原因;但也不要动它,官方文档明确要求不要修改,订阅器靠它判断这篇文章有没有推送过,改了会让旧文在RSS里重新冒出来。用search-replace时带上--skip-columns=guid就行。
验证看三处:前台点三级页面,后台保存一次设置,再回wp_options查那两个值。三级页面能打开,说明正文里的旧域名也换掉了;后台保存之后不跳回旧域,说明两处地址都生效了。
备份、改siteurl和home、全库替换、清缓存、旧域名301,这五件事的先后不能换。清缓存放在替换之后,倒过来会把旧值又写回去。旧域名的301要等新域名能正常访问之后再配,提前配上会把排查入口也关掉,出问题时连旧域名都打不开,少一条退路。
这几步里跳过任何一步,症状都长得一样:页面能开,链接还回旧域,后台反而一切正常。真遇到这种情况,从清缓存往回查,不必从头再来,先刷缓存再查两个字段。
A5创业网 版权所有