前言
本文的一部分内容参考自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),直接修改下图的两个网址为新网址,然后点击底部的“保存设置”按钮即可
第二种办法:修改数据库
由于某些原因,你可能无法直接访问WP后台,那就可以通过操作数据库来修改域名。
很多主机商都提供了可视化的数据库管理界面,就算没有,你在安装环境的时候也应该有安装过phpMyAdmin之类的管理软件。这里以宝塔为例
注意:任何数据库操作都有风险,建议先在此之前备份一下数据库
然后进入到对应网站的数据库,点击进入wp_options这个表(表前缀可能不同):
通过上面的步骤,你现在可以通过新网址访问你的网站和网站后台了。如果不能,那说明还是有一些问题,但这是很正常的情况,有专门的对策。
不出意外,现在应该出意外了。
你现在访问网站可能会出现,点击超链接跳转到的还是旧域名,有部分静态资源(比如CSS等)没被加载的情况,这些情况很正常,这说明你的网站数据库里面还存在网站的旧域名,这些旧域名应该要被替换掉才对。
接下来,我们需要查找和替换掉网站数据库中所有旧域名,为了方便操作,你可以像WP大学原文那样,使用 Better Search Replace 插件进行操作。
具体的操作步骤,请参考《Better Search Replace:查找和替换数据库内容》或者《WordPress更换域名后修改站内链接插件:Update URLs》
这个插件不保证是否可用,我的办法是进入数据库,使用几行SQL代码完成这个替换的操作。
注意:任何数据库操作都有风险,如果你能够使用插件操作,尽量使用插件,在迫不得已的情况下再操作数据库。并且建议在操作数据库之前备份一下数据库。
你可以直接用我写的一个网站进行生成对应的SQL代码:
这个网站实际上就一个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';
注意,如果你已经完成了前面的更改网站地址的操作,那么第一行语句可以不用执行,它执行的是同样的操作。
第一行语句的意思:在options表中,siteurl和home对应的值由旧域名替换为新域名
第二行语句的意思:在posts表中,把文章的内容中的旧域名替换为新域名
第三行语句的意思:在postmeta表中,把文章元数据中的旧域名替换为新域名
第四行语句的意思:在comments表中,把评论的内容中的旧域名替换为新域名
第四行语句的意思:在comments表中,把评论的作者地址中的旧域名替换为新域名
第五行语句的意思:在posts表中,把文章中的旧域名对应guid替换为新域名对应guid
guid 是唯一标识符(短链接),它记录了文章的最原始 URL 信息,似乎只在 WordPress 的 RSS 中用到,平时写文章没有任何影响。貌似这个语句执不执行都没有什么大碍。
写在最后
正如前面所说,更换域名要慎重,尤其是老网站换域名,按照上面的操作更换了以后,通常我们建议以下操作:
- 建议保留旧域名继续保持解析,并绑定在这个主机中,并设置301跳转到新域名,因为旧网站会有一些收录结果,用户仍旧会通过旧域名访问。建议至少保留3个月以上,在此之后,确保用户流量没有流失,确保搜索引擎蜘蛛已经了解到你已经更换域名,再进行下一步的操作。
- 到百度、Google等站长平台,去申请改版换域名等操作
- 到友链网站去告知他们更换网址
如果有什么问题,欢迎在评论区中提问,网站更换域名还是一个很大的坑
- 最新
- 最热
只看作者