从旧服务器迁移 Typecho 站点后 permalinks 失效怎么办

文章导读
迁移后伪静态失效通常是因为新服务器未配置重写规则或配置文件仍指向旧域名。优先检查 Web 服务器伪静态设置,并在后台强制启用地址重写。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

迁移后伪静态失效通常是因为新服务器未配置重写规则或配置文件仍指向旧域名。优先检查 Web 服务器伪静态设置,并在后台强制启用地址重写。

先说结论:Typecho 迁移后伪静态失效主要是新环境缺少 Rewrite 规则或配置未更新,需手动配置服务器规则并刷新后台设置。

  • 适合 Typecho 迁移后伪静态失效场景
  • 先准备 Web 服务器配置文件权限
  • 验收 标准为非首页链接能正常打开

命令速用版

若使用 Nginx 服务器,需在配置文件中添加以下重写规则并重启服务。以下规则来自 Typecho 官方文档及社区验证配置:

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;
}

保存配置文件后,执行以下命令重载 Nginx:

sudo nginx -s reload

为什么会这样

伪静态规则属于服务器环境配置,不会随网站源码自动迁移。旧服务器的 Nginx 或 Apache 配置中已包含重写规则,但新服务器默认没有这些规则,导致除了首页外的所有路径无法被正确解析到 index.php。

分步处理

按照以下顺序排查,每步完成后尝试访问一篇旧文章链接。

1. 配置服务器伪静态规则
找到网站的 Nginx 配置文件,通常位于/etc/nginx/site-enabled 目录下。在配置文件中加入上述重写规则。如果是 Apache 服务器,需确保.htaccess 文件存在且 AllowOverride 已开启。

2. 后台强制启用重写
登录博客后台(域名/admin/),依次点击“网站设置”->“永久链接”->“是否使用地址重写功能”,选择“启用”。如果下方出现错误提示,直接打勾强制启用。

3. 检查配置文件域名
打开网站根目录的 config.inc.php 文件,检查_site_url 或相关域名配置是否已更新为新域名。若迁移过程中更换了域名,此处未更新会导致跳转异常。

4. 修复数据库连接类型
若迁移后出现"Database Server Error",打开 config.inc.php 找到$db 字段,将"MySql"修改为"Pdo_Mysql"。这是因为部分新环境 PHP 版本不再支持旧版 Mysql 驱动。

怎么验证是否生效

访问博客中任意一篇非首页的文章链接,例如 https://你的域名/archives/123.html。如果页面能正常加载且 URL 地址栏保持不变,说明伪静态已生效。若跳转回首页或显示 404/403,则需重新检查服务器配置。

从旧服务器迁移 Typecho 站点后 permalinks 失效怎么办

常见坑

1. 出现 403 Forbidden 错误
这通常是因为 Nginx 配置未正确支持 pathinfo 或伪静态规则未生效。检查 location 设置是否包含.php 后缀的路径处理。

2. 无法登录后台
点击前台链接或后台登录时出现 404,可能是 Nginx 版本过低不支持静态地址 POST 请求,建议升级 Nginx 至 0.7 及以上版本。

3. 数据库连接失败
迁移后若报错数据库错误,除密码错误外,还需检查驱动类型。PHP7 及以上环境建议使用 Pdo_Mysql 而非 Mysql 驱动。

常见问题

迁移后除了首页其他页面都打不开怎么办?

这是伪静态规则未配置导致的。请在 Nginx 配置中添加 Typecho 专用的 rewrite 规则并重启服务。

后台启用伪静态时提示错误怎么办?

直接在错误提示下方打勾强制启用即可,只要服务器端规则配置正确,前台即可正常访问。

迁移后出现 Database Server Error 如何解决?

打开 config.inc.php 文件,将数据库驱动类型从"MySql"修改为"Pdo_Mysql"并保存。

参考来源

1. Typecho 博客迁移教程 [可运行源码] - 介绍了迁移步骤及伪静态开启方法

2. typecho 设置伪静态规则 - 提供了 Nginx 配置代码及 403 错误解决方案

3. 小灯泡设计 - 记录了迁移后 Database Server Error 的 Mysql 改 Pdo_Mysql 解决方法