搬家这件事,看起来只是「把文件复制过去、把数据库导进去」,但真正卡人的从来不是这两步,而是搬完之后:后台登不上、图片全裂、文章 404、时间差 8 小时。这篇把我自己搬过几次 Typecho 的流程和踩过的坑一次性写清楚,照着做基本能一次过。
搬家前必须先做的 3 件事
跳过这三步直接动手,出问题就只能靠回忆,而回忆是靠不住的。
- 导出完整数据库。不要只导
typecho_contents,配置、分类、插件状态、主题设置全在typecho_options里。用 mysqldump 一次导全:mysqldump -u 用户名 -p 数据库名 > backup.sql - 打包整个
usr/uploads目录。文章里的图片、附件都在这里,很多人只搬了代码,结果图片全裂。顺便确认usr/themes、usr/plugins也一起打包,别漏。 - 记录当前环境的 PHP 版本和扩展。后台首页能看到版本号,扩展看
php -m。Typecho 1.2 要求 PHP 7.2 以上,且至少要有 mysqli、fileinfo、curl、mbstring。这一步决定了你搬过去会不会直接白屏。
标准搬家流程(9 步)
1. 新服务器先把环境跑起来
宝塔面板的话,装 Nginx 或 Apache + PHP(版本对齐老环境)+ MySQL。先建库建用户,字符集选 utf8mb4,别用 utf8,表情符号会丢。
2. 导入数据库
mysql -u 用户名 -p 数据库名 < backup.sql导完先执行一句 SELECT COUNT(*) FROM typecho_contents; 看看条数对不对,跟老站比一下。
3. 上传网站文件
整个目录传上去,包括 usr、var、admin。传完先别急着开网站。
4. 改 config.inc.php
这是最容易漏的一步。数据库地址、库名、用户名、密码四要素全部要改成新的:
$db->addServer(array(
'host' => 'localhost',
'port' => 3306,
'user' => '新用户名',
'password' => '新密码',
'database' => '新库名',
'charset' => 'utf8mb4',
), \Typecho\Db::READ | \Typecho\Db::WRITE);5. 目录权限
目录 755、文件 644,usr/uploads 需要可写。宝塔用户注意所有者要跟 PHP 运行用户一致,否则后台上传附件会报错。
6. 改站点地址(换域名的关键)
数据库里执行:
UPDATE typecho_options SET value='https://新域名' WHERE name='siteUrl';只改这一条通常还不够,主题设置里如果存了绝对地址(比如 logo、头像链接),也要一起改。稳妥做法是连同 theme:主题名 这一行一起检查。
7. 配置伪静态
Nginx 加一段:
location / {
if (-f $request_filename/index.html){
rewrite (.*) $1/index.html break;
}
if (-f $request_filename/index.php){
rewrite (.*) $1/index.php;
}
if (!-f $request_filename){
rewrite (.*) /index.php;
}
}Apache 用 .htaccess 的话,注意两点:一是主机必须允许 AllowOverride,二是 FastCGI 环境下 index.php/$1 这种写法容易报 No input file specified,改成直接重写到 index.php 更稳。
8. 老域名做 301
换域名必须做 301,否则老站积累的收录全部作废:
RewriteEngine On
RewriteRule ^(.*)$ https://新域名/$1 [R=301,L]9. 逐项验收
首页、文章页、分类页、搜索、后台、RSS 各点一遍,再传一张图片试试。
8 个必踩的坑,以及怎么绕过去
| 现象 | 真正的原因 | 怎么处理 |
|---|---|---|
| 整站白屏,没有任何报错 | PHP 版本过低,或缺少 mysqli/mbstring 扩展 | 看 PHP 错误日志;升级版本、装扩展 |
| 后台能登录,点任何菜单又跳回登录页 | siteUrl 还是老域名,Cookie 域不匹配 | 改 typecho_options.siteUrl,清浏览器 Cookie |
| 文章图片全部裂开 | usr/uploads 没传全,或图片是绝对地址指向老域名 | 补传附件;数据库里批量替换域名 |
| 首页能开,文章页 404 | 伪静态没配,或规则写错 | 先确认 /index.php/archives/1/ 能开,再修伪静态 |
| 发布时间全部差 8 小时 | 服务器时区不是 Asia/Shanghai | PHP 配置里设置 date.timezone=Asia/Shanghai |
| 后台插件页报错打不开 | 插件目录没传,但数据库里还记着插件是启用状态 | 补传 usr/plugins,或在 options 里重置插件状态 |
| 主题设置全变成默认值 | 只导了 contents,漏了 theme:xxx 那条 option | 重新导 typecho_options 全表 |
| HTTPS 下样式丢失、锁标变灰 | 页面里还有 http:// 的图片或脚本地址 | 全站替换为 // 或 https |
一句话总结
搬家的本质不是搬文件,而是搬「环境 + 数据 + 地址」三件套。文件搬完只是开始,真正决定成败的是 config.inc.php、siteUrl 和伪静态这三处。
搬家、白屏修复、伪静态与主题改造的报价和服务范围,写在 服务与报价 页。如果你正卡在某个报错上,把截图和现象说清楚就行。
本文由 admin 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。