一聊到禁用搜索功能,很多人可能会觉得奇怪,好好的为什么要禁用搜索呢?
主要有几方面原因。
一、安全性考虑
SQL注入其中一个切入点就是搜索,搜索时通过转码的布尔、联合等手段,通过多次尝试,虽然当前像WordPress、PHP,都对类似攻击做了一定防御,但是说不定哪一天一个新的漏洞,无疑让我们承担更多风险。
二、优化需要
相较于第一点,第二点其实才是重点。
数据库优化一直是一个热门话题,当你的部落格只有十几篇文章时,搜索入口负担不会很大,有着丝滑般的体验。
但是,当你有几千篇文章的时候,攻击者,或者恶意访问者,通过不管请求搜索入口和关键字,动态的消耗服务器资源,就如同不断请求登陆也一样,哪怕你做了缓存处理,动态内容本质上还是动态内容,都是要运行SQL输出的。好不夸张的说,如果没有做任何优化,你把你的WordPress登陆地址或者搜索地址,用17ce等工具进行测试,说不定都能让服务器满负荷。
那么,当你有几十万,几百万,千万级的文章数量时,每一次搜索,都会成为服务器的负担,MySQL长期处于高占用,不断的消耗资源,乃至于崩溃。
所以,数量级特别大的时候,关闭搜索,是优化过程中必不可少的一个环节。
三、如何关闭
碰巧,我有个网站,不小心采集了很多文章,如果不做优化,还影响同服务器的其他站点,所以需要优化和关闭搜索。
进入后台,外观->主题文件编辑器->functions.php
在最末未加上如下语句:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if(!is_admin()){ function fb_filter_query( $query, $error = true ) { if ( is_search() ) { $query->is_search = false; $query->query_vars[s] = false; $query->query[s] = false; if ( $error == true ) $query->is_404 = true; } } add_action( 'parse_query', 'fb_filter_query' ); add_filter( 'get_search_form', create_function( '$a', "return null;" ) ); } |
保存文件,清除缓存,即可。
原创文章,作者:蓝洛水深,如若转载,请注明出处:https://blog.lanluo.cn/11078