以热爱记生活

Typecho 域名变更全记录:从踩坑到标准化流程


最近因域名到期将个人博客从旧域名 xzlo.blog 迁移到新域名 yrajsh.cn,由于操作顺序不当,遇到了 Nginx 配置冲突、SSL 证书路径错误、数据库 siteUrl 未更新、后台登录跳转异常,网站中写死的使用旧路径等一系列问题。本文将复盘这次“踩坑”经历,并整理出一套标准的域名变更流程,帮助大家避免类似问题。

一、我的“错误顺序”踩坑记
1. 直接移动网站文件夹,未改 Web 服务器配置
操作:将 /www/wwwroot/xzlo.blog 重命名为 /www/wwwroot/yrajsh.cn。
结果:Nginx 配置文件中的 root 仍指向旧路径,导致 404。
教训:修改目录前必须先更新 Nginx/Apache 配置,或通过宝塔面板修改站点根目录。

2. 旧域名 SSL 证书残留,Nginx 无法启动
现象:启动 Nginx 时提示 cannot load certificate "/www/server/panel/vhost/cert/xzlo.blog/fullchain.pem"。
原因:站点配置文件中 ssl_certificate 路径仍指向旧域名证书,而证书文件已被删除。
解决:手动清理所有配置文件中的旧证书路径,并重新为域名申请证书。

3. 数据库中 siteUrl 未更新,导致后台登录跳转异常
现象:前台能访问,但登录后台时跳转到旧域名或错误地址。
原因:Typecho 使用 typecho_options 表中的 siteUrl 值生成链接。
解决:通过 SQL 更新 siteUrl 为新域名,并替换文章内容中的旧域名。

4. 错误添加 __TYPECHO_ROOT_URL__ 常量导致登录跳转混乱
现象:删除 siteUrl 问题后仍无法登录,提交表单跳转到 https://yra/index.php/action/login。
原因:在 config.inc.php 中手动添加了 define('__TYPECHO_ROOT_URL__', 'https://yrajsh.cn');,该常量会覆盖数据库设置,且可能与某些环境不兼容。
解决:删除该行代码,恢复默认行为。

5. 添加站点时未创建数据库,导致后期手动修改连接信息
现象:新站点没有自动生成数据库配置,需要手动修改 config.inc.php。
解决:后期补建数据库,从原来的数据库中备份导入新的数据库,并且修改config.inc.php配置文件。


经过一番不小的折腾终于恢复啦

二、标准化域名变更流程(宝塔面板 + Typecho)
经过这次教训,我总结出以下 9 步标准化流程,按顺序执行可大幅减少意外。

第 1 步:备份网站文件和数据库(任何时候都要做)
文件备份:将旧域名目录压缩打包,例如: 

tar -czf xzlo_blog_backup.tar.gz #你网站路径地址/xzlo.blog


数据库备份:通过宝塔面板备份数据库导出数据库,或使用 mysqldump 命令备份。

mysqldump -u root -p --socket=/tmp/mysql.sock xzlo_blog > #你网站路径地址/backup/xzlo_blog_backup.sql

第 2 步:新域名解析并等待生效
登录域名服务商后台,添加 A 记录(或 CNAME)指向服务器 IP。

使用https://whatsmydns.me/或者 nslookup 或其他的在线工具验证解析生效,确保生效后再进行下一步。


第 3 步:在宝塔面板添加新站点(或修改现有站点)
推荐:直接添加新站点,根目录指向旧网站文件所在目录(例如 /你的网站路径/xzlo.blog)。

如果旧目录已改名,则先改回原名,或手动指定正确路径。

数据库:如果旧数据库已存在且用户/密码不变,选择“不创建数据库”;如果希望新建数据库,则按需创建,后期导入数据。

PHP 版本:与旧站点保持一致。

如果旧站点已经删除,可先临时恢复旧目录结构,确保新站点能指向正确的文件位置。

第 4 步:修改 Typecho 配置文件(config.inc.php)
如果数据库名/用户名/密码发生变化,编辑 /你网站目录/新域名/config.inc.php,更新对应字段。

重要:检查是否有 __TYPECHO_SITE_URL__ 或 __TYPECHO_ROOT_URL__ 等自定义常量,建议删除,让系统自动从数据库读取。

第 5 步:更新数据库中的站点 URL
登录 phpMyAdmin 或执行 SQL:

-- 更新配置表options站点地址
UPDATE 配置表 SET value = 'https://新域名' WHERE name = 'siteUrl';
-- 替换文章表contents内容中的旧域名
UPDATE 文章表 SET text = REPLACE(text, 'http://旧域名', 'https://新域名');
UPDATE 文章表 SET text = REPLACE(text, 'https://旧域名', '
-- 修改用户表users目录的旧域名
UPDATE 用户表  SET text = REPLACE(text, 'https://旧域名', 'https://新域名');


第 6 步:申请 SSL 证书(推荐使用 DNS 验证)
在宝塔面板的站点设置 → SSL 中,选择 Let's Encrypt。

验证方式务必选择 DNS 验证(避免因配置文件未就绪导致文件验证失败)。

按提示添加 TXT 记录,等待验证通过,证书自动部署。

第 7 步:测试网站功能
访问 https://新域名 查看前台。

登录后台,检查文章、分类、附件等是否正常。

检查浏览器控制台是否有资源加载失败的提示(如图片仍引用旧域名)。

第 8 步:清理旧域名残留
如果旧域名不再使用,可在 Nginx 配置中删除对应的 server 块,或通过宝塔面板删除旧站点(注意不要删除网站目录和数据库)。

删除服务器上旧域名的 SSL 证书目录(可选),避免混淆。

第 9 步:检查伪静态规则
如果之前启用了伪静态,确保新站点配置中已添加相应规则(Typecho 规则通常可在宝塔面板的“伪静态”下拉中选择)。

测试内页是否正常访问,避免出现 index.php 未隐藏的问题。

三、常见问题及快速解决方法

问题原因解决方法
Nginx 启动失败,报错找不到证书配置文件中 SSL 路径仍指向旧域名编辑站点配置文件,修改 ssl_certificate 和 ssl_certificate_key 路径
网站打不开,显示 404站点根目录指向错误或未生效检查 Nginx 配置中的 root 路径,重载配置
前台正常,后台登录跳转到旧域名数据库 siteUrl 未更新执行 SQL 更新 表options 表中的 siteUrl
登录表单提交到错误地址配置文件中硬编码了 __TYPECHO_ROOT_URL__删除该常量定义
文章内图片仍是旧域名链接数据库内容未替换执行 REPLACE SQL 语句更新 typecho_contents.text 字段
新域名申请 SSL 证书失败文件验证时 Nginx 配置未正确指向 .well-known 目录改用 DNS 验证,或手动修复 Nginx 配置

四、总结

域名变更本身不复杂,但涉及的环节较多(DNS、Web 服务器、数据库、程序配置),任何一步顺序颠倒都可能引发连锁问题。正确的顺序应是:先准备新域名(解析) → 调整服务器配置指向新域名 → 更新程序数据库 → 申请 SSL 证书 → 测试 → 清理旧配置。

希望能帮助大家顺利完成自己的域名变更,少走弯路。如果你在操作中遇到其他问题,欢迎留言交流。

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »

因本文不是用Markdown格式的编辑器书写的,转换的页面可能不符合AMP标准。