前言:之前为了使网站打开的速度更快,对首页进行了静态化处理,设置了一个定时任务,每隔 10分钟 刷新首页,重新静态化,保证能够在较短时间内更新网站首页。

但是当时没有排错,今天有朋友问我为什么无法使用搜索功能了?我上去一看,果然如此,如图:

然后就开始排查出现这个问题的原因,开始我以为是前两天放了几个插件的问题,导致冲突,一一取消发现还是报错405。

后来就突然想到之前设置了一个定时任务,进行静态化首页处理,我去把这个任务关掉之后,还原一下设置,再回来看,果不其然,是因为静态化出的问题,因为 typecho 不支持静态页面搜索, index.html 自然就无法使用搜索功能了。(我这里说的有问题,更正一下,真正的原因并不是因为 index.html 无法使用搜索功能。而是进行搜索时,都是搜索首页的关键字。因果关系要明确,虽然结果是一样的。)

解决办法也很简单,找到 search 所在的模板页,每个人的网站可能不太一样,我的是在 sidebar.php , 然后在 <?php $this->options->siteUrl(); ?> 后面加上/search,目的是把 post 请求指向 /search 这个路径,这样的话就不受静态化的影响了。

代码如下:

<div class="component">
  <!--<form class="layui-form" id="search" method="post" action="<?php $this->options->siteUrl(); ?>" role="search">-->
  <form class="layui-form" id="search" method="post" action="<?php $this->options->siteUrl(); ?>/search" role="search">
    <div class="layui-inline input">
      <input autocomplete="off" type="text" id="s" name="s" class="layui-input" required lay-verify="required" placeholder="<?php _e('输入关键字搜索'); ?>" />
    </div>
    <div class="layui-inline">
      <button class="layui-btn layui-btn-sm layui-btn-primary"><i class="layui-icon">&#xe615;</i></button>
    </div>
  </form>
</div>

再然后就是等到下一个刷新周期,10分钟后再来尝试搜索,没有任何问题。

可以在阅读之余试一下本站的搜索功能。

记录一下这次事故,下次在新增功能,一定要测试排错。