Typecho 搬家不踩坑:9 步流程和 8 个必踩的坑
· 技术笔记 · 0 条评论

搬家这件事,看起来只是「把文件复制过去、把数据库导进去」,但真正卡人的从来不是这两步,而是搬完之后:后台登不上、图片全裂、文章 404、时间差 8 小时。这篇把我自己搬过几次 Typecho 的流程和踩过的坑一次性写清楚,照着做基本能一次过。

搬家前必须先做的 3 件事

跳过这三步直接动手,出问题就只能靠回忆,而回忆是靠不住的。

  1. 导出完整数据库。不要只导typecho_contents,配置、分类、插件状态、主题设置全在 typecho_options 里。用 mysqldump 一次导全:
    mysqldump -u 用户名 -p 数据库名 > backup.sql
  2. 打包整个 usr/uploads 目录。文章里的图片、附件都在这里,很多人只搬了代码,结果图片全裂。顺便确认 usr/themes、usr/plugins 也一起打包,别漏。
  3. 记录当前环境的 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/ShanghaiPHP 配置里设置 date.timezone=Asia/Shanghai
后台插件页报错打不开插件目录没传,但数据库里还记着插件是启用状态补传 usr/plugins,或在 options 里重置插件状态
主题设置全变成默认值只导了 contents,漏了 theme:xxx 那条 option重新导 typecho_options 全表
HTTPS 下样式丢失、锁标变灰页面里还有 http:// 的图片或脚本地址全站替换为 // 或 https

一句话总结

搬家的本质不是搬文件,而是搬「环境 + 数据 + 地址」三件套。文件搬完只是开始,真正决定成败的是 config.inc.php、siteUrl 和伪静态这三处。

搬家、白屏修复、伪静态与主题改造的报价和服务范围,写在 服务与报价 页。如果你正卡在某个报错上,把截图和现象说清楚就行。

需要有人帮你把网站弄好?

上面这些问题我基本都修过。把报错截图和现象说清楚,我 30 分钟内告诉你:能不能修、多少钱、多久交付。

看服务与报价 复制微信号 发邮件

不接资源站、私服、外挂类项目。先说清需求,我判断能不能做之后再报价。


Warning: Undefined array key "permalink" in /www/users/HK1501351/WEB/usr/themes/pinghsu-master/functions.php on line 302
←

Warning: Undefined array key "permalink" in /www/users/HK1501351/WEB/usr/themes/pinghsu-master/functions.php on line 321
→
↓ ↑
评论
微信 邮件 报价