网站更换域名可能是很多站长必须会经历的事情,但是很多新手站长根据百度的教程只要一修改域名立马出问题,这是为什么呢?这篇教程我就教大家如何做到最完美的换域名!
教程开始之前,我们必须要先明白换域名的基本逻辑以及为什么根据百度的教程换了就会出问题呢?
很多新手站长想要换域名,那就直接进入后台设置中,修改WordPress地址
及站点地址
,那么如果你只做了这一步,那100%是会出问题的!
为什么?因为你只修改了WordPress地址
,那么你网站中其他地方的链接就没变啊!比如文章中的、页面中的、各种设置中的等等!
稍微有经验的站长,可能就会百度,在百度上很容易找到一些教程,教你在数据中输入批量替换的命令进行替换,这种方法已经是比较理想的了。但是,这样仍然无法全部替换,还是会有很多地方的链接无法替换干净。
这时候可能有些老站长就会用到数据库的搜索功能了,找出旧地址,进行更换。没错!这种方式确实是最细致的!但是!在做这一步之前我们必须要了解数据库的数据储存格式!所有序列化的数据是不能直接改数据库的!只要改了,那这一段数据就全部失效了!
修改逻辑及流程
上面我们简单的阐述了更换域名的大致流程和可能会遇到的问题,接下来我们先整理一下更换的逻辑和流程,然后我们学习的这其中的原理。最后我们再手把手教学。
此教程主要针对网站更换域名、修改网站URL,同时也适用于网站批量修改图片地址、批量修改其他URL等,只要掌握这其中的原理的逻辑就都能实现。
修改方法其实就是通过数据库批量修改,但是我们必须要明白的就是数据库的数据储存格式问题,也就是序列化格式修改的问题。其次就是怎样才能尽量替换干净且不出错。
序列化格式讲解
数据库是无法直接储存数组(array)和对象(object)数据的,那么目前最好的方式就是将这两种数据序列化之后存入数据库,这也是WordPress和目前多数程序的方式。序列化后的数据不仅有对象内容,还有对象的类型和字符数量
!没错,就是这个字符数量问题导致了,如果我们直接修改了序列化数据里面的内容,但是字符数量如果和之前的不同,那么就会导致整个数据失效!请查看以下截图,就能明白这里的逻辑了。
看到这里我相信大家就能恍然大悟了,也就是说,换域名我们还通过数据库批量替换,但是如果更换前后的字符数量不一致,那么序列化数据就不能直接换!
更换流程
那么我们再梳理一下,更换域名的流程
- 首先,我们需要判断更换的新旧内容的字符数量是否一致!
- 进入数据库通过批量命令更换不是序列化的数据
- 然后再根据第一步的判断,用不同的方法来更换序列化的数据
- 通过数据库全局搜索找到没换干净的数据再替换
批量替换教程
操作前,请务必前备份整个数据库!!
首先我们进入网站的数据库管理,推荐使用phpMyAdmin可视化命令,如果有其他数据库管理面板也行,方法大致一样吗,我们以宝塔为例,如图所示,进入phpMyAdmin。
接下来就是重点了,判断你需要更换的前后内容的字符数量是否一致!如果一致那就可以直接批量替换所有内容,如果不一致,批量替换时候就需要排除序列化数据,后面再单独修改序列化数据
批量替换命令
如果前后内容字符数量一致
,请使用以下命令批量替换数据库全部内容(包括序列化数据)。请复制以下代码,并按下面的图示修改后,再粘贴到SQL命令中执行!
#前后内容字符数量一致 UPDATE wp_options SET option_value = replace(option_value, 'https://old.zibll.com','https://new.zibll.com');#配置表 UPDATE wp_posts SET post_content = replace(post_content, 'https://old.zibll.com','https://new.zibll.com');#文章内容 UPDATE wp_postmeta SET meta_value = replace(meta_value, 'https://old.zibll.com','https://new.zibll.com');#文章Meta UPDATE wp_posts SET guid = replace(guid, 'https://old.zibll.com','https://new.zibll.com');#文章链接 UPDATE wp_comments SET comment_content = replace(comment_content, 'https://old.zibll.com','https://new.zibll.com');#评论内容 UPDATE wp_comments SET comment_author_url = replace(comment_author_url, 'https://old.zibll.com','https://new.zibll.com');#评论网址 UPDATE wp_commentmeta SET meta_value = replace(meta_value , 'https://old.zibll.com','https://new.zibll.com');#评论mate UPDATE wp_users SET user_url = replace(user_url, 'https://old.zibll.com','https://new.zibll.com');#用户链接 UPDATE wp_usermeta SET meta_value = replace(meta_value, 'https://old.zibll.com','https://new.zibll.com');#用户meta UPDATE wp_zib_message SET title = replace(title, 'https://old.zibll.com','https://new.zibll.com');#子比消息:标题 UPDATE wp_zib_message SET content = replace(content, 'https://old.zibll.com','https://new.zibll.com');#子比消息:内容 UPDATE wp_termmeta SET meta_value = replace(meta_value , 'https://old.zibll.com','https://new.zibll.com');#trem_mate
#前后内容字符数量一致
UPDATE wp_options SET option_value = replace(option_value, 'https://old.zibll.com','https://new.zibll.com');#配置表
UPDATE wp_posts SET post_content = replace(post_content, 'https://old.zibll.com','https://new.zibll.com');#文章内容
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'https://old.zibll.com','https://new.zibll.com');#文章Meta
UPDATE wp_posts SET guid = replace(guid, 'https://old.zibll.com','https://new.zibll.com');#文章链接
UPDATE wp_comments SET comment_content = replace(comment_content, 'https://old.zibll.com','https://new.zibll.com');#评论内容
UPDATE wp_comments SET comment_author_url = replace(comment_author_url, 'https://old.zibll.com','https://new.zibll.com');#评论网址
UPDATE wp_commentmeta SET meta_value = replace(meta_value , 'https://old.zibll.com','https://new.zibll.com');#评论mate
UPDATE wp_users SET user_url = replace(user_url, 'https://old.zibll.com','https://new.zibll.com');#用户链接
UPDATE wp_usermeta SET meta_value = replace(meta_value, 'https://old.zibll.com','https://new.zibll.com');#用户meta
UPDATE wp_zib_message SET title = replace(title, 'https://old.zibll.com','https://new.zibll.com');#子比消息:标题
UPDATE wp_zib_message SET content = replace(content, 'https://old.zibll.com','https://new.zibll.com');#子比消息:内容
UPDATE wp_termmeta SET meta_value = replace(meta_value , 'https://old.zibll.com','https://new.zibll.com');#trem_mate
如果前后字符数量不一致
,则使用以下代码(已排除序列化数据):
#前后内容字符数量不一致 UPDATE wp_posts SET post_content = replace(post_content, 'http://old.zibll.com','https://new.zibll.com');#文章内容 UPDATE wp_posts SET guid = replace(guid, 'http://old.zibll.com','https://new.zibll.com');#文章链接 UPDATE wp_comments SET comment_content = replace(comment_content, 'http://old.zibll.com','https://new.zibll.com');#评论内容 UPDATE wp_comments SET comment_author_url = replace(comment_author_url, 'http://old.zibll.com','https://new.zibll.com');#评论网址 UPDATE wp_users SET user_url = replace(user_url, 'http://old.zibll.com','https://new.zibll.com');#用户链接 UPDATE wp_zib_message SET title = replace(title, 'http://old.zibll.com','https://new.zibll.com');#子比消息:标题 UPDATE wp_zib_message SET content = replace(content, 'http://old.zibll.com','https://new.zibll.com');#子比消息:内容 UPDATE wp_options SET option_value = replace(option_value, 'http://old.zibll.com','https://new.zibll.com') WHERE option_value NOT LIKE '%{%' and option_value NOT LIKE '%}';#配置表 UPDATE wp_termmeta SET meta_value = replace(meta_value , 'http://old.zibll.com','https://new.zibll.com') WHERE meta_value NOT LIKE '%{%' and meta_value NOT LIKE '%}';#trem_mate UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://old.zibll.com','https://new.zibll.com') WHERE meta_value NOT LIKE '%{%' and meta_value NOT LIKE '%}';#文章Meta UPDATE wp_commentmeta SET meta_value = replace(meta_value , 'http://old.zibll.com','https://new.zibll.com') WHERE meta_value NOT LIKE '%{%' and meta_value NOT LIKE '%}';#评论mate UPDATE wp_usermeta SET meta_value = replace(meta_value, 'http://old.zibll.com','https://new.zibll.com') WHERE meta_value NOT LIKE '%{%' and meta_value NOT LIKE '%}';#用户meta
#前后内容字符数量不一致
UPDATE wp_posts SET post_content = replace(post_content, 'http://old.zibll.com','https://new.zibll.com');#文章内容
UPDATE wp_posts SET guid = replace(guid, 'http://old.zibll.com','https://new.zibll.com');#文章链接
UPDATE wp_comments SET comment_content = replace(comment_content, 'http://old.zibll.com','https://new.zibll.com');#评论内容
UPDATE wp_comments SET comment_author_url = replace(comment_author_url, 'http://old.zibll.com','https://new.zibll.com');#评论网址
UPDATE wp_users SET user_url = replace(user_url, 'http://old.zibll.com','https://new.zibll.com');#用户链接
UPDATE wp_zib_message SET title = replace(title, 'http://old.zibll.com','https://new.zibll.com');#子比消息:标题
UPDATE wp_zib_message SET content = replace(content, 'http://old.zibll.com','https://new.zibll.com');#子比消息:内容
UPDATE wp_options SET option_value = replace(option_value, 'http://old.zibll.com','https://new.zibll.com') WHERE option_value NOT LIKE '%{%' and option_value NOT LIKE '%}';#配置表
UPDATE wp_termmeta SET meta_value = replace(meta_value , 'http://old.zibll.com','https://new.zibll.com') WHERE meta_value NOT LIKE '%{%' and meta_value NOT LIKE '%}';#trem_mate
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://old.zibll.com','https://new.zibll.com') WHERE meta_value NOT LIKE '%{%' and meta_value NOT LIKE '%}';#文章Meta
UPDATE wp_commentmeta SET meta_value = replace(meta_value , 'http://old.zibll.com','https://new.zibll.com') WHERE meta_value NOT LIKE '%{%' and meta_value NOT LIKE '%}';#评论mate
UPDATE wp_usermeta SET meta_value = replace(meta_value, 'http://old.zibll.com','https://new.zibll.com') WHERE meta_value NOT LIKE '%{%' and meta_value NOT LIKE '%}';#用户meta
需要修改的地方:表前缀、新域名、旧域名,如图所示
执行完以上命令后,可以查看每一行命令修改了多少个数据。到这一步,我们也就基本上完成了主要的替换工作,接下来就是通过全局查找,手动替换还未替换成功的数据和序列化数据
全局搜索替换
序列化数据替换
这里就是最让人头疼的地方了,没办法,如果替换前后内容字符数量不一致,序列化数据是没有任何办法批量替换的,也就只有一个一个的替换了。
在替换的时候注意几点技巧:
- 可以把数据复制到自己习惯的代码编辑中,搜索替换
- 替换内容后,一定要对应修改字符数量(字符数量不要自己数,用这个网站计算,因为不同语言单字占用数量不完全相同)
….. md,太麻烦了,我空了写个工具算了。
最后说明一下:
- 很多只要你修改后台的
WordPress地址
及站点地址
都需要按此教程做,即使仅仅从http改为https也是一样。 - 本教程标题是最完美的教程,但并不是完美方案,这个确实已经是目前最高效且出问题最小的方案了
- 本文教程适用于整个WordPress,并不是仅子比主题,同时本文说的一些问题也不是子比主题和WordPress的问题,数据库逻辑就是这样
暂无评论内容