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配置文件。
经过一番不小的折腾终于恢复啦
经过这次教训,我总结出以下 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标准。