以前给Wordpress网站换域名没有考虑过老域名还要301重定向的事情,因为老域名直接不用了,这次更换就遇到这个问题了,老域名还是继续要用,所以就得考虑301的问题了。
先再说下Wordpress更换域名的过程:
1.1、先到网站后台的常规设置去换成自己的新域名。
1.2、然后用我们开源的插件:WPBReplace 再去批量替换剩下网址就行。
WPBReplace下载:https://www.jingxialai.com/4251.html
直接到phpMyAdmin里面去执行下面的sql命令:
UPDATE wp_options SET option_value = REPLACE(option_value, 'https://旧域名', 'https://新域名');
UPDATE wp_posts SET post_content = replace( post_content, 'https://旧域名', 'https://新域名');
UPDATE wp_posts SET guid = replace( guid, 'https://旧域名', 'https://新域名');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'https://旧域名', 'https://新域名');
准备工作:老域名的ssl证书,如果是换服务器了,老域名也要解析到新服务器上。
这里是nginx的规则,在你的网站nginx文件里面新增一个443端口监听,我这里的规则只是演示,具体根据你自己的改。
上面的server是你新域名的正常规则,只是在下面新增一个server,用于老域名的跳转。
server
{
listen 80;
listen 443 ssl http2;
server_name www.新域名.com;
ssl_certificate /usr/local/ssl/www.新域名.com.crt;
ssl_certificate_key /usr/local/ssl/www.新域名.com.key;
#其他规则
}
server
{
listen 443 ssl http2;
server_name www.老域名.com;
ssl_certificate /usr/local/ssl/www.老域名.com.crt;
ssl_certificate_key /usr/local/ssl/www.老域名.com.key;
if ($host = www.老域名.com) {
return 301 https://www.新域名.com$request_uri;
}
}
老域名也可以加上80端口,主要是看你之前的网站规则是怎么样的。
也可以用rewrite规则:
if ($host = www.老域名.com) {
rewrite ^(.*)$ http://www.新域名.com/$1 permanent;
}
当然推荐用return,return更高效,rewrite会额外增加一次请求,它们的区别查看:https://cloud.tencent.com/developer/article/2393092
用nginx -t检查一下规则,如果没问题,就重启nginx,现在你的老域名https,就能正常跳转到新域名的https了。
现在查看浏览器状态或者找个工具查询老域名的http状态,应该就是301了。
如果你老域名没有用ssl证书,不是https,就不用这么麻烦了,只需要一个server就行:
server
{
listen 80;
listen 443 ssl http2;
server_name www.新域名.com www.老域名.com;
ssl_certificate /usr/local/ssl/www.新域名.com.crt;
ssl_certificate_key /usr/local/ssl/www.新域名.com.key;
if ($host != www.新域名.com) { return 301 $scheme://www.新域名.com$request_uri; }
#其他规则
}
Apache规则:https://cloud.tencent.com/developer/article/1050161 不过这是我2015年写的,不知道规则现在还能不能用。
这个方式更简单,只需要去加个域名解析就行了,但是不推荐!
国内域名做301网址跳转解析,也就是显性url转发,需要你域名已经实名,并且转发的网址需要已经备案。
国外域名301跳转一般叫:Web Redirect
解析商提供的转发没有用nginx规则灵活,并且可能出现不稳定、请求延迟的情况。