简要

在旧教程基础上额外增加更多解决方案

WordPress搜索防御:搜索页伪静态化

https://www.blueskyxn.com/202101/3328.html

解决方案一

在主题包中的函数文件function.php底部加入代码

//搜索伪静态化
function tongleer_search_url_rewrite() {
if ( is_search() && ! empty( $_GET['s'] ) ) {
wp_redirect( home_url( "/search/" ) . urlencode( get_query_var( 's' ) ) );
exit();
}
}
add_action( 'template_redirect', 'tongleer_search_url_rewrite' );
//code end

加入保存后去前台搜索,就会发现链接地址会跳转到【/search/关键词】了。当然,为了能让搜索直接进入这个页面,而不是 302跳转,我们可以稍微更改一下这个搜索框。

解决方案二

当然如果你是Apache主机,还可以通过如下方法实现

RewriteCond %{QUERY_STRING} \\?s=([^&]+) [NC]
RewriteRule ^$ /search/%1/? [NC,R,L]

解决方案三

一般 wordpress主题常规搜索框代码如下:

<div id="searchbar">
<form method="get" id="searchform" action="//zhang.ge/">
<input type="text" name="s" id="s" placeholder="输入搜索内容" />
<button type="submit" id="searchsubmit">搜索</button>
</form>
</div>

输入内容,点击搜索后就必然会跳到 ?s=keyword 这个动态页面。所以,我们需要通过js代码来拦截这搜索动作,然后重新定义跳转地址,将代码如下修改即可:

<div id="searchbar"> <form method="get" id="searchform" action="//zhang.ge/search/">
<input id="wp_search" placeholder="请输入搜索内容" onkeydown="if(event.keyCode==13){return Searcher('wp');}">
<button type="submit" id="searchsubmit" onclick="return Search('wp');">搜索</button>
</form>
</div>
<script type="text/javascript">
function Search(){
var value=$("#wp_search").val()||"";
window.open("https://zhang.ge/search/"+value+"/");
return false;
}
</script>

还是比较简单的代码,原理就是给【搜索】这个动作绑定了一个 js函数,而这个 js函数的功能就是获取当前输入的关键词,并拼接成一个新的地址,最后跳转过去即可。

解决方案四

通过根目录 .htaccess 文件更改搜索 URL跳转
根目录 .htaccess 文件通常用于设置重定向和其他网站的配置任务。这里也可以使用它来更改 WordPress 中的默认搜索链接地址。

该 .htaccess 文件位于网站的根文件夹中,你需要使用 FTP 或文件管理器应用程序对其进行编辑修改。

在你的 .htaccess 文件中添加下面的2、3行代码:

# Change WordPress search URL
RewriteCond %{QUERY_STRING} \\?s=([^&]+) [NC]
RewriteRule ^$ /search/%1/? [NC,R,L]

添加修改完后保存并将 .htaccess 文件上传回网站根目录。

解决方案五

在一的基础上,使用CloudFlare页面规则做转发

比如XXXX/?s=*

的规则为:转发 URL (状态代码: 301 - 永久重定向, URL: https://XXXX/search/*)

解决方案六

在一的基础上类似页面规则,在服务器做重定向,301/302都可以,前后端都行,一起也行

我是如何做的

因为我所有流量都有走cloudflare,所以写好函数后,在cf做页面规则即可