域名解析
修改网站Web服务器配置文件
----报错nginx: [warn] conflcting server name "j000e.com" on 0.0.0.0:443, ignored
----配置301重定向,将不带www的域名转为带www的域名
修改数据库域名


一直想要一个.com的域名,遂在namesilo购买了新域名j000e.com,替换原来的joooe.xyz.在操作前,先对服务器和数据库进行备份.

域名解析

将新购买的域名直接A记录解析到vps的ip,www用CNAME解析到@(即主域名j000e.com),这里我已经给域名套了Cloudflare,所以解析配置直接在CF的DNS设置中填写即可,不需要改namesilo的任何参数.

修改网站Web服务器配置文件

我使用的是LNMP包,所以我的旧vhost配置文件在/usr/local/nginx/conf/vhost/joooe.xyz.conf,如果现在vi /usr/local/nginx/conf/vhost/joooe.xyz.conf并将其中的旧域名全都替换为新域名,网站就已经可以访问了,但是还要涉及到新域名的ssl,所以我放弃了原有的配置文件,先准备好新域名的ssl证书和密钥,如果没有单独准备,那么稍后可以使用lnmp自带的Let's Encrypt的ssl,准备好后lnmp ssl add填写新域名,网站目录还填写/home/wwwroot/joooe.xyz,开启rewrite,填写typecho,开启pathinfo,ssl根据情况选择,我使用了CF的证书则需要提供证书和密钥的绝对路径,然后配置即可完成,这时看/usr/local/nginx/conf/vhost/下面多了一个新域名的配置文件j000e.com.conf

报错nginx: [warn] conflcting server name "j000e.com" on 0.0.0.0:443, ignored

但是两个配置文件同时存在,使用nginx -t检查配置准确性时就会出现nginx: [warn] conflcting server name "j000e.com" on 0.0.0.0:443, ignored这样的多条报警
warn
这时需要新建一个文件夹,把旧配置文件放进去即可

cd /usr/local/nginx/conf/vhost/
mkdir oldconf
mv joooe.xyz.conf oldconf/

配置301重定向,将不带www的域名转为带www的域名

即将对j000e.com进行访问时转到www.j000e.com
直接在/usr/local/nginx/conf/vhost/joooe.xyz.conf中的server字段末尾添加

if ($host != 'www.j000e.com'){
        rewrite ^/(.*)$ https://www.j000e.com/$1 permanent;
        }

即可,我的完整配置文件如下

server
    {
        listen 443 ssl http2;
        #listen [::]:443 ssl http2;
        server_name www.j000e.com j000e.com;
        index index.html index.htm index.php default.html default.htm default.php;
        root  /home/wwwroot/joooe.xyz;
        ssl on;
        ssl_certificate /home/wwwroot/j000e.com.pem;
        ssl_certificate_key /home/wwwroot/j000e.com.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
        ssl_session_cache builtin:1000 shared:SSL:10m;
        # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048
        ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem;

        include rewrite/typecho.conf;
        #error_page   404   /404.html;

        # Deny access to PHP files in specific directory
        #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }

        include enable-php-pathinfo.conf;

        location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
        {
            expires      30d;
        }

        location ~ .*\.(js|css)?$
        {
            expires      12h;
        }

        location ~ /.well-known {
            allow all;
        }

        location ~ /\.
        {
            deny all;
        }

        access_log off;

        if ($host != 'www.j000e.com'){
        rewrite ^/(.*)$ https://www.j000e.com/$1 permanent;
        }
    }

修改数据库域名

进入mysql命令行,然后修改替换4个参数域名,分别执行

mysql -uroot -pXXXX
use typecho
UPDATE `typecho_users` SET `url` = replace (`url`,'https://www.joooe.xyz','https://www.j000e.com');
UPDATE `typecho_options` SET `value` = replace (`value`,'https://www.joooe.xyz','https://www.j000e.com');
UPDATE `typecho_comments` SET `url` = replace (`url`,'https://www.joooe.xyz','https://www.j000e.com');
UPDATE `typecho_contents` SET `text` = replace (`text`,'https://www.joooe.xyz','https://www.j000e.com');
exit

数据库名typecho,新旧域名按需修改
在修改数据库旧url的时候我将一个命令分多次修改旧域名不同形式执行,如第一条update我使用https://www.joooe.xyz执行一次,再改成www.joooe.xyz执行一次,再改成joooe.xyz执行一次,应该可以替换掉所有旧域名,如图
edit
注解:

UPDATE `cdb_name` SET `field_name` = replace (`field_name`,'from_str','to_str')

UPDATE `typecho_users` SET `url` = replace (`url`,'https://www.joooe.xyz','https://www.j000e.com');修改用户URL
UPDATE `typecho_options` SET `value` = replace (`value`,'https://www.joooe.xyz','https://www.j000e.com');修改站点URL
UPDATE `typecho_comments` SET `url` = replace (`url`,'https://www.joooe.xyz','https://www.j000e.com');修改评论中的URL
UPDATE `typecho_contents` SET `text` = replace (`text`,'https://www.joooe.xyz','https://www.j000e.com');修改文章中的URL

cdb_name(该字符或字符串所在表的名字)
field_name(该字符或字符串所在字段的字段名)
from_str(需要替换的字符串)
to_str(替换成的字符串)

最后检查哪些地方没有修改过来,自行修改.

THE END
最后修改:2019 年 01 月 13 日 11 : 28
本文链接:https://www.j000e.com/linux/changedomain.html
版权声明:本文『为Typecho换新域名』为『Joe』原创。著作权归作者所有。
转载说明:为Typecho换新域名 || Joe's Blog』转载许可类型见文末右下角标识。允许规范转载时,转载文章需注明原文出处及地址。
Last modification:January 13, 2019