Quanyin 说

Typecho 站内搜索报 405 错误原因解析与解决办法

前两天分享了一个 typecho 首页静态化的方法,然而,很不幸的是,今天发现搜索出了问题,发现无法进行搜索,遇到问题怎么办?当然是解决他啊!

问题追踪

遇到问题不慌,先找原因,这两天对博客动的手脚不多,一个是用了一个首页静态化生成 html 的脚本,另一个是对 js 做了一些变动。首先把 js 文件恢复,发现问题仍然存在,说明这不是原因嘛。

上大招,开 F12,发现搜索提交时报 405 错误,好了现在非常明确了,是首页纯静态 html 带来的问题。现在有两个解决办法,一个是放弃首页静态化,作为当代青年,怎么可以直接就放弃!当然是选择继续修复啊!

原因分析

搜索了一下,首先发现 405 错误返回代码是请求行中指定的请求方法不能被用于请求相应的资源,说人话就是如 nginx / Apache 之类的后台 web 服务器不允许静态文件响应 POST 请求。

对于 http 返回错误 405 而言,一般的解决办法是调整请求方法,如将 POST 改成 GET.

解决办法

既然不能对首页静态文件进行 POST 请求,那么就让搜索回到它本来该去的地方呗,将搜索的 action 地址调整为/search。例如,在本站使用的主题 initial 中,其搜索代码如下(在 header.php 文件中):

<div id="site-search">
<form id="search" method="post" action="<?php $this->options->siteUrl(); ?>">
<input type="text" id="s" name="s" placeholder="输入关键字搜索" required />
<button type="submit"></button>
</form>
</div>

修改搜索提交时 POSTaction 地址:

<div id="site-search">
<form id="search" method="post" action="<?php $this->options->siteUrl(); ?>search">
<input type="text" id="s" name="s" placeholder="输入关键字搜索" required />
<button type="submit"></button>
</form>
</div>

大功告成!

参考

当前页面是本站的「Google AMP」版。查看和发表评论请点击:完整版 »