Typecho的Mirages主题评论回复无效怎么解决

2022年5月13日15:09:37
评论

前几天,我将Typecho升级到了1.2.0,Mirages主题也是7.10.4最新版,在发表文章后我发现,博客的回复有问题,所有回复内容不能提交,点击了提交按钮没有反应,于是我就在线咨询了主题的作者,得到了问题原因和暂时的解决方法。

和主题有关的问题是评论不成功时,失败的消息没有展示出来,但是你网站出错的原因是请求的时候 Referer 没有提交给服务器,老实说我不太清楚这个的原因,你可以先把Typecho 中, /var/Widget/FeedBack.php,87 – 111 行注释掉,暂时解决这个问题。

这个原因跟我之前的设置应该有关系,因为之前我在设置bilibili视频解析的时候,在head头部文件中加入了一行。

<meta name="referrer" content="no-referrer">

将这一行删除掉之后就可以解决不能回复的问题了,但是我还是需要使用bilibili视频的解析功能,所以我只能是参照主题作者给出的解决方法来处理。

if (empty($referer)) {
    throw new Exception(_t('评论来源页错误.'), 403);
}

$refererPart = parse_url($referer);
$currentPart = parse_url($this->content->permalink);

if (
    $refererPart['host'] != $currentPart['host'] ||
    0 !== strpos($refererPart['path'], $currentPart['path'])
) {
    //自定义首页支持
    if ('page:' . $this->content->cid == $this->options->frontPage) {
        $currentPart = parse_url(rtrim($this->options->siteUrl, '/') . '/');

        if (
            $refererPart['host'] != $currentPart['host'] ||
            0 !== strpos($refererPart['path'], $currentPart['path'])
        ) {
            throw new Exception(_t('评论来源页错误.'), 403);
        }
    } else {
        throw new Exception(_t('评论来源页错误.'), 403);
    }
}

按照主题作者的要求,把这个主题评论错误页的判断代码先注释掉,评论是没有错误提示和没有之前的没有反应的现像了,但是评论提交后,在后台审核页和文章页面都看不到该评论,如果将refrere那一行删除掉后,是可以评论了,但是评论后却有一个转圈的图标一直在转圈。

Typecho的Mirages主题评论回复无效怎么解决

Typecho的Mirages主题评论回复无效怎么解决

在/var/Widget/Security.php这个文件中,我们可以看到getReferer()这个函数,所以在回复的时候,Typecho应该是调取了系统浏览器的referrer来路,问题应该出在这里。

/**
 * 保护提交数据
 */
public function protect()
{
    if ($this->enabled && $this->request->get('_') != $this->getToken($this->request->getReferer())) {
        $this->response->goBack();
    }
}

1、我尝试过将上边那个源码中的getReferer()修改成getRequestUrl(),因为我看到某个博客上说过,在Typecho的反垃圾检测中,文章和页面调用的检测是不一样的,文章调用的是getReferer(),而页面调用的是getRequestUrl()这个,但是这么做仍然没有效果。

2、我尝试修改了/var/Widget/FeedBack.php文件中下面这段,但是也没有效果。我在 Feedback.php文件中看到有一个$referer变量是调用的getReferer()这个函数,因为我通过F12工具看过页面里的源码,发现在发送消息头的时候,会发送一个referer,显示的是当前的网址。

所以,我新建了一个自定义函数,是获取当前网页地址的,然后用来替换掉它的变量,但是同样没有效果。

/*
 * 这是新增的代码,替代 getReferer() 函数*/
public function typechon_get_referer()
{
    if (strpos($_SERVER["HTTP_HOST"], "www.python.hn.cn") !== false || strpos($_SERVER["HTTP_HOST"], "mangshe.python.hn.cn") !== false) {
        $tycode = $_SERVER["HTTP_HOST"];
    }
    return $tycode;
}
/** 检查来源 */
if ($this->options->commentsCheckReferer && 'false' != $this->parameter->checkReferer) {
    #$referer = $this->request->getReferer(); //这里改成
    $referer = typechon_get_referer();

Typecho的Mirages主题评论回复无效怎么解决
Typecho的Mirages主题评论回复无效怎么解决
解决方法:

1、因为Typecho的反垃圾回复的检测,所以我们需要关闭反垃圾检测功能和关闭检查评论来源页 URL 是否与文章链接一致。这两个功能。

2、官方给出的解决方法,将替换成

官方链接:

https://github.com/typecho/typecho/issues/1414

https://forum.typecho.org/viewtopic.php?t=15595

Typecho的Mirages主题评论回复无效怎么解决
 

 

给Typecho博客添加QQ空间“那年今日”功能 WordPress

给Typecho博客添加QQ空间“那年今日”功能

经常逛 QQ 空间的人会发现,它就有这个功能。这个功能是展示与今天同一天发生的事、写的文章,上传的图片等等。这个功能也叫历史上的今天。改用了 typecho 程序后,JOE主题的作者不断加强主题,而这...
Typecho实现文章回复可见效果代码 WordPress

Typecho实现文章回复可见效果代码

我们经常遇到一些个人网站提供的重要的文件下载、主题下载等文件需要用户回复可见。这些功能到底是如何实现的呢?今天需要分享的是在Typecho程序中如何实现回复才可见的效果。 找到文章展示页面模板 <...
Typecho博客网站底部添加网站已运行时间方法 WordPress

Typecho博客网站底部添加网站已运行时间方法

很多人的网站上都有小字计时说明:本网站已经运行了多长时间。这是一个很精致的功能,非常的有仪式感。 其实在Typecho中,实现这样的功能,只需要通过插件,甚至修改下代码就能实现这一功能。 代码及安装 ...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: