joe再续前缘主题打不开?提示请求服务器失败,请稍后再试怎么办

寒烟似雪
1年前发布 /正在检测是否收录...

各位伙计!昨天字节曜博客的突发故障唠唠

昨天是不是有朋友打开字节曜博客的时候,弹出了这个报错界面?
报错
我和另一位编辑昨天下午4点打算更文的时候,也撞上了这个问题——好好的站点突然就打不开了,当时急得不行


第一轮没结果的排查

一开始我们试了好几个思路,都没解决:

  1. 另一位编辑想换成WP来解决,结果Typecho的后台都打不开,没法装插件迁移数据,这个方案直接放弃
  2. 我怀疑是源码出问题,试着用备份恢复站点,结果也没起作用
    折腾到晚上一点头绪都没有,只好先把这事放一放

终于锁定“罪魁祸首”

第二天接着排查,很快就找到方向了:

  1. 先确认服务器没问题——宝塔面板能正常打开,排除服务器本身的故障
  2. 找了两个同样用Typecho搭建的站点测试:颤立诚小站NaN博客都能正常访问,只有字节曜打不开
  3. 对比之后发现,只有字节曜装了78易航防火墙插件,另外两个站点都没装,结合插件故障的常见原因来看,这个私人加密的防火墙插件,大概率是和当前的Typecho环境出现了兼容性问题

有点曲折的解决过程

确定问题后,我们试了几个解决方法,走了点弯路:

  1. 先试着在数据库里删掉这个插件的对应数据,没起作用
  2. 试着删除插件目录,结果又爆出了新的报错:
    mjdxlx9r.png
    只好先把目录恢复回来

后来发现是WebFirewall.php出了问题,这个插件的原版代码是加密的没法修改,所以我写了一个空壳文件替换它——这个空壳文件去掉了防火墙的功能,只保留了Typecho插件需要的基础结构,避免代码报错,同时兜底捕获未定义的方法调用,防止其他回调出问题:

<?php
/**
 * WebFirewall 插件空壳(修复Typecho_Plugin类未找到错误)
 * 去掉了防火墙功能(原版加密成13了,没法改)
 * 作者:字节曜 寒烟似雪
 */

// 命名空间
namespace TypechoPlugin\WebFirewall;

// 引入Typecho核心类
if (!class_exists('Typecho_Plugin')) {
    require_once __DIR__ . '/../../../var/Typecho/Plugin.php';
}

// 核心类(匹配错误提示的WebFirewall)
class WebFirewall
{
    /**
     * 插件激活方法(空实现)
     */
    public static function activate()
    {
        return true;
    }

    /**
     * 插件禁用方法(空实现)
     */
    public static function deactivate()
    {
        return true;
    }

    /**
     * 插件配置方法(空实现)
     */
    public static function config(\Typecho_Widget_Helper_Form $form)
    {
        // 空配置,无字段
    }

    /**
     * 个人配置方法(空实现)
     */
    public static function personalConfig(\Typecho_Widget_Helper_Form $form)
    {
        // 空配置
    }

    /**
     * 兜底:捕获所有未定义的静态方法调用(防止其他回调报错)
     */
    public static function __callStatic($name, $arguments)
    {
        return null;
    }
}

// Typecho_Plugin前加\,表示调用全局命名空间的类
\Typecho_Plugin::factory('Plugin.php')->activate = ['TypechoPlugin\WebFirewall\WebFirewall', 'activate'];
\Typecho_Plugin::factory('Plugin.php')->deactivate = ['TypechoPlugin\WebFirewall\WebFirewall', 'deactivate'];
\Typecho_Plugin::factory('Plugin.php')->config = ['TypechoPlugin\WebFirewall\WebFirewall', 'config'];
\Typecho_Plugin::factory('Plugin.php')->personalConfig = ['TypechoPlugin\WebFirewall\WebFirewall', 'personalConfig'];

?>

替换之后顺利进到了后台,第一件事就是把这个私人插件卸载了:
卸载插件


给同用Typecho的朋友提个醒

如果你们也遇到这类私人加密插件导致站点打不开、后台进不去的情况,可以试试这个空壳文件的方法:

  1. 替换对应的插件PHP文件
  2. 进到后台后直接卸载插件

气死我了,可恶的🐔🐔航

© 版权声明
THE END
喜欢就支持一下吧
点赞 0 分享 收藏
评论 抢沙发
OωO
取消
SSL