【WordPress】网站更换域名应该怎么做

【WordPress】网站更换域名应该怎么做

前言

本文的一部分内容参考自WordPress大学:https://www.wpdaxue.com/wordpress-change-domain-name.html

为什么要更换域名

网站更换域名无非就是以下几个原因。

  • 将本地已经开发好的网站正式上线,需要将本地的测试域名更换为正式的互联网上的域名
  • 老网站上已经线一段时间了,由于某些原因必须更换域名

对于第一种情况,你基本不需要考虑什么问题,只需要把网站中所有的旧域名换成新域名就好了,操作比较无脑。但对于第二种情况,你需要考虑的问题就比较多了。

你的网站可能被搜索引擎有收录过内容,想要保证你的用户不流失,搜索引擎权重、排名不丢失。你还需要考虑网站的重定向问题(将旧域名重定向到新域名)并且在网站内对用户进行通知。提醒否则随意更换网站可能导致你的网站权重和排名的丢失。

第二种情况要考虑的问题很多,由于篇幅有限,本文不展开讲,但会简单提一提。

老网站更换域名需要注意的一些东西

非必要,不建议给老网站更换域名。网站上线越久,用户体量越大,换域名所造成的损失也就越大。

老网站换域名的基本操作和正常换域名的操作是一致的,但是你需要注意以下的一些东西:

在旧域名到期前一段时间,你就要开始准备换域名了。因为你还要保证旧域名在更换后有一段时间保留着,重定向到新域名。

在换域名前后一段时间对用户进行通知,确保你的用户不会丢失。

你还需要对搜索引擎权重做好相关处理,但本文仅涉及域名操作,不会涉及SEO。

更换域名

1、解析并绑定新域名到主机上

你需要给你的新域名解析到服务器上(这和你的旧域名解析并绑定的操作是一样的,在这里不会展开讲,如果你没有这方面的经验,可以问域名解析商和服务器提供商,他们应该会给你答案)

由于每个域名注册商的解析操作都不太一样,如果不会进行解析操作的,请自己看域名注册商的文档,或者找客服咨询。在这里不做演示。

添加了域名解析记录以后,我们需要将域名绑定到主机面板中,每个主机商的面板可能也不一样,并且有的人可能是实体服务器,有的人可能是云服务器,也有的人可能是虚拟主机,每个主机的操作都不太一样(但大体上可以安装宝塔面板,宝塔面板的简单教程参考:https://www.rsnocsi.cn/991.html)这没办法统一介绍,所以有不懂的建议去询问服务器提供商,他们应该会给你答案。

2、修改网站域名

注意:请务必完成域名解析和绑定操作,确保新域名已经生效后,再进行这一步操作!

一般来说,你有两种方法修改你网站的域名,最推荐的办法是第一种,但是第一种方法需要进入你的WP后台,但有些情况你可能无法进入WP后台,你可以参考第二种情况。

注意:两种情况都需要你对网站有一定的管理权限,第一种方法需要的权限少,只要你能进WP后台,并且拥有管理员角色的权限即可,第二种方法最省事,但有一定技术门槛,你需要有网站的数据库管理权限。如果你都没有,那我也不好说什么了,这个换域名的操作应该与你没什么关系才对。

第一种办法:直接在WP后台修改网站地址

如果你可以通过当前的旧域名直接访问网站后台,就可以使用这个方法,这个办法简单安全,可以避免数据库操作(但是想要换域名换得彻底,你迟早都得进数据库操作)

访问WP后台,点击侧边栏的:设置 – 常规(网站地址/wp-admin/options-general.php),直接修改下图的两个网址为新网址,然后点击底部的“保存设置”按钮即可

图片[1]-【Wordpress】网站更换域名应该怎么做 - Abyss-博客-Abyss-博客
修改完之后点保存设置就好了。

第二种办法:修改数据库

由于某些原因,你可能无法直接访问WP后台,那就可以通过操作数据库来修改域名。

很多主机商都提供了可视化的数据库管理界面,就算没有,你在安装环境的时候也应该有安装过phpMyAdmin之类的管理软件。这里以宝塔为例

图片[2]-【Wordpress】网站更换域名应该怎么做 - Abyss-博客-Abyss-博客
通过数据库,可以访问到phpMyAdmin,点击上图中的phpMyAdmin。使用网站数据库的root用户名和root密码登录即可登录。

注意:任何数据库操作都有风险,建议先在此之前备份一下数据库

然后进入到对应网站的数据库,点击进入wp_options这个表(表前缀可能不同):

图片[3]-【Wordpress】网站更换域名应该怎么做 - Abyss-博客-Abyss-博客
图片[4]-【Wordpress】网站更换域名应该怎么做 - Abyss-博客-Abyss-博客

通过上面的步骤,你现在可以通过新网址访问你的网站和网站后台了。如果不能,那说明还是有一些问题,但这是很正常的情况,有专门的对策。

不出意外,现在应该出意外了。

你现在访问网站可能会出现,点击超链接跳转到的还是旧域名,有部分静态资源(比如CSS等)没被加载的情况,这些情况很正常,这说明你的网站数据库里面还存在网站的旧域名,这些旧域名应该要被替换掉才对。

接下来,我们需要查找和替换掉网站数据库中所有旧域名,为了方便操作,你可以像WP大学原文那样,使用 Better Search Replace 插件进行操作。

具体的操作步骤,请参考《Better Search Replace:查找和替换数据库内容》或者《WordPress更换域名后修改站内链接插件:Update URLs

这个插件不保证是否可用,我的办法是进入数据库,使用几行SQL代码完成这个替换的操作。

注意:任何数据库操作都有风险,如果你能够使用插件操作,尽量使用插件,在迫不得已的情况下再操作数据库。并且建议在操作数据库之前备份一下数据库。

你可以直接用我写的一个网站进行生成对应的SQL代码:

https://nocsi.xyz/wordpress/

这个网站实际上就一个index.html和main.css文件,生成操作也是在index.html里面内嵌的JS脚本完成的,只是将预设的SQL里面的一些关键词替换成用户提供的就行,只需要几十行代码。

<!doctype html>
<html>
	<head>
		<meta charset="utf-8">
		<title>WordPress博客域名更换器</title>
    <link href="main.css" rel="stylesheet" type="text/css">
	</head>
	<body>
		<h1 class="headline">WordPress 博客域名更换器</h1>
		
		<div class="body">
    		<input type="text" id="old" name="input" placeholder="输入旧域名">
    		<br><br>
    		<input type="text" id="new" name="input" placeholder="输入新域名">
    		<br><br>
    		<input type="text" id="prefix" name="input" width="600px" placeholder="输入表前缀(留空则代表wp_,别忘了后面要加上_)">
    		<br><br>
    	</div>
    	
    	<div class="Button">
    		<input type="submit" value="生成" id="submit" class="button">
    		<br><br><br>
		    <input type="submit" value="提示" class="button" onclick="document.getElementById('tip').showModal();">
		</div>
		
		<div class="dialog">
		    <dialog id="tip">
                <h1>提示</h1>
                <p>在三个输入框中依次输入旧域名、新域名和表前缀,表前缀是安装Wordpress时填写的,如果你不清楚,请直接填写wp_,如果你在安装Wordpress时使用了不同的表前缀,你就需要输入正确的表前缀,并且最后需要写上_</p>
                <p>点击生成后你会见到自动生成的SQL,把这些SQL复制到MySQL去执行一下代码就会自动执行数据库操作。</p>
                <p class="warning">注意:在执行任何数据库操作前都应该对数据库进行备份。数据是无价的!</p>
                <button class="close" onclick="document.getElementById('tip').close();">×</button>
            </dialog>
            
            <dialog id="Result">
                <h1 id="tips"></h1>
                <p id="result"></p>
                <button class="close" onclick="document.getElementById('Result').close();">×</button>
            </dialog>
		</div>
            
		<script type="text/javascript">
			function output(){
				var oldurl = document.getElementById("old").value;
				var newurl = document.getElementById("new").value;
				var prefix = document.getElementById("prefix").value;
				if(oldurl != "" && newurl != ""){
				    if(prefix != ""){
				        var output = `
        					UPDATE ${prefix}options SET option_value = REPLACE(option_value, '${oldurl}', '${newurl}') WHERE option_name = 'home' OR option_name = 'siteurl';
        					<br><br>
        					UPDATE ${prefix}posts SET post_content = REPLACE (post_content, '${oldurl}', '${newurl}');
        					<br><br>
        					UPDATE ${prefix}postmeta SET meta_value = REPLACE (meta_value, '${oldurl}','${newurl}');
        					<br><br>
        					UPDATE ${prefix}comments SET comment_content = REPLACE (comment_content, '${oldurl}', '${newurl}');
        					<br><br>
        					UPDATE ${prefix}comments SET comment_author_url = REPLACE (comment_author_url, '${oldurl}','${newurl}');
        					<br><br>
        					UPDATE ${prefix}posts SET guid = REPLACE (guid, '${oldurl}', '${newurl}') WHERE post_type = 'attachment';
						`;
				    }
				    else{
				        var output = `
        					UPDATE wp_options SET option_value = REPLACE(option_value, '${oldurl}', '${newurl}') WHERE option_name = 'home' OR option_name = 'siteurl';
        					<br><br>
        					UPDATE wp_posts SET post_content = REPLACE (post_content, '${oldurl}', '${newurl}');
        					<br><br>
        					UPDATE wp_postmeta SET meta_value = REPLACE (meta_value, '${oldurl}','${newurl}');
        					<br><br>
        					UPDATE wp_comments SET comment_content = REPLACE (comment_content, '${oldurl}', '${newurl}');
        					<br><br>
        					UPDATE wp_comments SET comment_author_url = REPLACE (comment_author_url, '${oldurl}','${newurl}');
        					<br><br>
        					UPDATE wp_posts SET guid = REPLACE (guid, '${oldurl}', '${newurl}') WHERE post_type = 'attachment';
						`;
				    }
				document.getElementById("tips").innerHTML = "输出结果(请到MySQL中运行以下代码):";
				document.getElementById("result").innerHTML = output;
				document.getElementById("Result").showModal();
				}
			}
			document.getElementById("submit").onclick = output;
		</script>
	</body>
</html>
#old, #new, #prefix{
    margin: auto;
}

.body{
    display: block;
    text-align: center;
}

.headline{
    text-align: center;
}
.button {
  display: inline-block;
  padding: 10px 20px;
  font-size: 16px;
  color: #fff;
  background-color: #0084ff;
  border: none;
  border-radius: 4px;
  cursor: pointer;
  position: absolute;
  left: 50%;
  transform: translate(-50%, 0);
}

.button:hover {
  background-color: #0073e6;
}

.body {
  position: relative;
  margin-bottom: 1.5rem;
  margin: 0 auto;
}

.body label {
  position: absolute;
  top: 0;
  left: 0;
  font-size: 1rem;
  color: #999;
  pointer-events: none;
  transition: 0.2s ease all;
}

.body input,
.body textarea {
  
  width: 30%;
  padding: 1rem;
  font-size: 1rem;
  border-radius: 0.25rem;
  border: 1px solid #ddd;
  transition: 0.2s ease all;
}

.body input:focus,
.body textarea:focus {
  outline: none;
  border-color: #aaa;
}

.body input:focus + label,
.body textarea:focus + label {
  top: -1.5rem;
  font-size: 0.75rem;
  color: #aaa;
}

dialog {
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  background-color: #fefefe;
  border: 1px solid #888;
  box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2), 0 6px 20px 0 rgba(0,0,0,0.19);
  border-radius: 5px;
  z-index: 1;
}

.close {
  color: #aaaaaa;
  float: right;
  font-size: 28px;
  font-weight: bold;
}

.close:hover,
.close:focus {
  color: #000;
  text-decoration: none;
  cursor: pointer;
}

.warning {
    color: red;
}

写的代码和样式很简单,水平也很一般。是几个小时速成的,由于本人CSS不太好,还参考了一下ChatGPT,现在的样式算不上特别好看,但起码比原先的好看很多了。

生成的SQL应该像下面这样,其中:${prefix}代表表前缀,${oldurl}代表旧域名,${newurl}代表新域名

UPDATE ${prefix}options SET option_value = REPLACE(option_value, '${oldurl}', '${newurl}') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE ${prefix}posts SET post_content = REPLACE (post_content, '${oldurl}', '${newurl}');
UPDATE ${prefix}postmeta SET meta_value = REPLACE (meta_value, '${oldurl}','${newurl}');
UPDATE ${prefix}comments SET comment_content = REPLACE (comment_content, '${oldurl}', '${newurl}');
UPDATE ${prefix}comments SET comment_author_url = REPLACE (comment_author_url, '${oldurl}','${newurl}');
UPDATE ${prefix}posts SET guid = REPLACE (guid, '${oldurl}', '${newurl}') WHERE post_type = 'attachment';
图片[5]-【Wordpress】网站更换域名应该怎么做 - Abyss-博客-Abyss-博客
在phpMyAdmin的SQL中执行这些语句。

注意,如果你已经完成了前面的更改网站地址的操作,那么第一行语句可以不用执行,它执行的是同样的操作。

第一行语句的意思:在options表中,siteurl和home对应的值由旧域名替换为新域名

第二行语句的意思:在posts表中,把文章的内容中的旧域名替换为新域名

第三行语句的意思:在postmeta表中,把文章元数据中的旧域名替换为新域名

第四行语句的意思:在comments表中,把评论的内容中的旧域名替换为新域名

第四行语句的意思:在comments表中,把评论的作者地址中的旧域名替换为新域名

第五行语句的意思:在posts表中,把文章中的旧域名对应guid替换为新域名对应guid

guid 是唯一标识符(短链接),它记录了文章的最原始 URL 信息,似乎只在 WordPress 的 RSS 中用到,平时写文章没有任何影响。貌似这个语句执不执行都没有什么大碍。

写在最后

正如前面所说,更换域名要慎重,尤其是老网站换域名,按照上面的操作更换了以后,通常我们建议以下操作:

  1. 建议保留旧域名继续保持解析,并绑定在这个主机中,并设置301跳转到新域名,因为旧网站会有一些收录结果,用户仍旧会通过旧域名访问。建议至少保留3个月以上,在此之后,确保用户流量没有流失,确保搜索引擎蜘蛛已经了解到你已经更换域名,再进行下一步的操作。
  2. 到百度、Google等站长平台,去申请改版换域名等操作
  3. 到友链网站去告知他们更换网址

如果有什么问题,欢迎在评论区中提问,网站更换域名还是一个很大的坑

© 版权声明
THE END
喜欢就支持一下吧
点赞1支持一下吧? 分享
评论 共2条
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片
      • Abyss的头像-Abyss-博客Abyss等级-LV10-Abyss-博客作者0