如何关闭 Typecho 默认 RSS

近期发现自用导航 item.ink 的 RSS 一直被频繁访问,显然不太正常。
众所周知,Typecho是自带RSS输出的,并且无法关闭,于是乎专门研究了一下(伪)关闭的方法,大概可分为两种方式。

方式一 修改数据库

不难发现 Typecho 文章编辑页面,右侧下方高级选项中有一个 允许在聚合中出现 的选择项,顾名思义可以控制文章是否出现在feed中,只不过这个这个选项是默认选中的,于是有以下策略:

  • 进入数据库,找到结尾为options 表,将namedefaultAllowFeed 的行,将其value值修改为0,如果你的站点有多个用户,可能会有多项记录,记得一并修改。一条通用SQL
1
UPDATE `options` SET `value` = '0' WHERE `name` = 'defaultAllowFeed';
  • 修改完默认配置后,还需要修改掉之前文章的配置,同样的,找到后缀为contents 的表,将所有文章的allowFeed 字段值修改为0,通用SQL如下(注意表名):
1
UPDATE `contents` SET `allowFeed` = '0';

方式二 修改代码

同样的,我们还可以直接修改typecho的源代码,更加简单方便,只不过以后如果更新需要重写修改一次

  • 进入typecho的程序路径,打开 var/Widget/Archive.php 文件,搜索if ($parameter->isFeed) 定位到类似如下的代码(本例为Typecho1.2.1稳定版):
1
2
3
4
5
    /** 用于判断是否为feed调用 */
    if ($parameter->isFeed) {
        //在这里加上 throw new WidgetException(_t('聚合页不存在'), 404);
        $this->invokeByFeed = true;
    }

在大括号中添加一行 throw new WidgetException(_t('聚合页不存在'), 404); ,也即访问feed会直接抛出异常转到404页面。 这种方式只是取巧,如需要彻底移除feed,代码改动还是比较大的。

done~