迁移后的Typecho问题
ypecho 动态 IP 环境适配与故障排查指南
场景一:解决动态 IP 导致的后台死链问题
Typecho 是一个使用 PHP 编写的博客系统。在部署环境(如容器、动态 IP 服务器)中,如果域名或 IP 地址不固定,系统生成的后台按钮链接往往会指向旧的 IP 地址或错误的端口,导致访问异常。
为了解决这个问题,我们需要开启相对地址模式。虽然开启后永久链接(伪静态)可能无法正常使用,但这能确保后台按钮在 IP 变动时依然可用。
开启相对地址的两种方法
方法一:修改数据库(不推荐)
直接修改数据库 typecho_options 表,将 siteUrl 字段的值改为相对路径(如 /)。
方法二:修改核心代码(推荐)
通过修改核心文件来绕过后台对“绝对 URL”的强制校验。
操作步骤:
1.定位文件:var/Widget/Options/General.php
2.查找代码(约 87 行):
->addRule('url', _t('请填写一个合法的URL地址'))3.修改代码:
->addRule('xssCheck', _t('请填写一个合法的URL地址'))4.保存文件,刷新后台即可生效。
修改效果:Typecho 后台不再强制校验站点地址协议和域名,后台所有链接自动适配当前访问地址,彻底解决动态 IP / 端口导致的死链问题。场景二:后台 “Server Error” 排查与修复
访问后台模块(如附件管理)出现 Server Error (500) 且无具体报错时,按以下步骤修复。
1. 开启调试模式
编辑网站根目录 config.inc.php,在 <?php 下方直接粘贴:
// ----------调试使用-------
define('__TYPECHO_DEBUG__', true);
error_reporting(E_ALL);
ini_set('display_errors', 'On');
// 强制输出错误到浏览器,防止被 Nginx 拦截
ini_set('html_errors', 'Off');
// -------------------------2. 分析报错信息
典型错误:TypeError: Argument 1 passed to Typecho\Common::mimeIconType() must be of the type string, null given
原因:数据库中部分附件 mime 字段为 NULL,但函数强制要求字符串,导致崩溃。
3. 修复方案
编辑文件:admin/manage-medias.php
修改前(报错):
<?php $mime = \Typecho\Common::mimeIconType($attachments->attachment->mime); ?>修改后(修复):
<?php $mime = \Typecho\Common::mimeIconType($attachments->attachment->mime ?? ''); ?>修复后完整代码段:
<?php while ($attachments->next()): ?>
<?php $mime = \Typecho\Common::mimeIconType($attachments->attachment->mime ?? ''); ?>4. 结果与注意
保存后刷新后台,Server Error 消失,附件管理正常显示。
️ 注意:调试完成后,务必注释 / 删除 config.inc.php 里的调试代码,避免生产环境泄露敏感信息。