当前位置

https方式调用百度站内搜索

James Qi 在 2019年4月9日 - 23:01 提交

  MediaWiki和Drupal都自带了站内搜索功能,我们多年都是直接调用,只在少数情况下尝试其它的,例如✉邮编库网站因为数据量过大,Wiki站的搜索常导致MySQL数据库卡住,后来改用了Sphinx才不再卡住,但搜索结果不尽如意,有一些莫名其妙的不相干结果,估计是没有把Sphinx摸透、没有专门加对中文的分词包吧。

  Drupal站也尝试安装过Apache Solr Search,感觉太复杂了,勉强用了一下,没有深入研究。Drupal站还用Views来进行过搜索、安装过Auto Complete,以及直接用SQL语句来进行搜索。

  另外,Google Custom Search(带AdSense广告)以及Google Ajax Search也曾经用过,百度尝试过百度联盟里面的搜索广告但没有用过专门的百度站内搜索,最近因为一些网站的数据量实在过大,考虑用上百度的站内搜索功能,发现竟然不支持https调用,再看相关新闻公告,主要集中在2014年、2015年,到2016以后只有一篇文章了,看来百度最近几年都没有升级和关注过这个功能了。

  在网上找了一些资料,有网友自己动手设法来解决https调用的问题,我们同事经过一番摸索也基本搞出来了,我又尝试了一些,记录如下,主要是用Apache的代理模式来解决,Apache的httpd.conf中需要开启这些模块:

LoadModule proxy_module       modules/mod_proxy.so
LoadModule proxy_http_module  modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so

  再在extra/httpd-ssl.conf里面设置代理的域名:

<VirtualHost _default_:443>
ServerName www.example.com
ServerAdmin webmaster@example.com
DocumentRoot "/alidata/www/example.com"
<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/alidata/www/example.com">
    AllowOverride All
    SSLOptions +StdEnvVars
</Directory>
   #ProxyPreserveHost On
   ProxyRequests Off
    
    ProxyPass /api  http://zhannei.baidu.com/api
    ProxyPassReverse /api http://zhannei.baidu.com/api
    
    ProxyPass /cse http://zhannei.baidu.com/cse
    ProxyPassReverse /cse http://zhannei.baidu.com/cse

    ProxyPass /customer_search http://znsv.baidu.com/customer_search
    ProxyPassReverse /customer_search http://znsv.baidu.com/customer_search
</VirtualHost>

  保存后重启Apache,就可以用https://www.example.com/api 来代理http://zhannei.baidu.com/api 了,其它还要代理几个其它目录:cse, customer_search等。

  在/alidata/www/example.com目录下建static/api放置需要的一些文件,还有一些细节以后补充,先把采用了百度站内搜索的https网站例子给出:

  上面两个例子的顶部都有搜索框,输入关键词后搜索就是给出的百度站内搜索结果,amp和mip版本顶部的搜索框也都可以用,搜索结果都是用的我们自己做反向代理的域名,支持https。

  搜索框的代码示例:

<form target="_top" name="f" action="/cse/search">
<input name="q" id="kw" placeholder="搜索关键词" type="text" class="search_form">
<input name="entry" value="1" type="hidden">
<input name="s" value="354632965240861xxxx" type="hidden">
<input type="submit" id="su" value="搜索" class="search_form">
</form>

  不过还有一些细节没有解决,例如:

  • 嵌入的百度联盟广告因为不是https的内容,所以不显示
  • 搜索结果中如果有图片(例如网站Logo),在PC版也是不显示的
  • 手机搜索结果中,顶部无法嵌入自己的标识、内容、链接等
  • 搜索结果页管理中,Logo无法输入成功,总是报错,网上搜索其他人也遇到

  希望百度以后还是能把这个站内搜索做得更完善一些,便于别人使用。

评论

添加新评论

Plain text

  • 不允许使用HTML标签。
  • 自动将网址与电子邮件地址转变为链接。
  • 自动断行和分段。