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>
修改搜索提交时 POST
的 action
地址:
<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>
大功告成!