WordPress 静态化搜索链接
September 3rd, 2007 Denis
把 WordPress 的搜索链接静态化也不是什么难事,只需要修改几个地方。不过在这里之前你要确保你的 Apache 支持 Mod_rewtite,并且你在你的 WordPress 已经启用 Permalink 的功能。
.htaccess 文件
在你的 .htaccess 文件中增加以下 mod_rewrite 规则:
RewriteRule ^search/(.+)?$ /index.php?s=$1 [QSA,L]
主题文件
添加一个 onsubmit 句柄到主题文件的搜索框的 form 标签:
<form action="<?php bloginfo('wpurl'); ?>/index.php" method="get" onsubmit="location.href='<?php bloginfo('home'); ?>/search/' + encodeURIComponent(this.s.value).replace(/%20/g, '+'); return false;">
就这么简单,以后你可以通过以下链接来搜索本站:
http://fairyfish.net/search/your+search+terms
翻译自:Friendly Search URLs,有删节!
更新:好像在 IE 可以直接输入:http://fairyfish.net/search/中文搜索词,FF上好像不行!暂时没有解决方法,不知道那位帅哥有办法?
作者:Denis
原文链接:WordPress 静态化搜索链接





1. ddkk3000 | September 3, 2007 at 11:50 am | #
恩,有位台兄刚好在问这个问题,鱼就发上来了,不知道是不是预见。。。呵呵
2. paopao | September 3, 2007 at 3:03 pm | #
有个在客户端的解决办法
打开FF的about:config页,把network.standard-url.encode-utf8的值设为true就可以了
3. Denis | September 3, 2007 at 3:09 pm | #
@ paopao,那这个就不是程序的问题了,无能为力了!
4. paopao | September 3, 2007 at 3:14 pm | #
服务器端解决起来应该比较麻烦
根据这篇文章说的,在firefox中,直接在地址栏访问带中文的url,firefox会以GBK编码方式发送到服务器端,这样就需要在搜索程序前加一个filter,对搜索的字符串进行编码判断并转成utf-8,然后再进行搜索
5. Denis | September 3, 2007 at 3:36 pm | #
@ paopao,因为这个是在 .htacess 实现的,所以好像不能转换,不过我再想想,谢谢你提供的信息。
6. oline01 | September 3, 2007 at 4:26 pm | #
好文!非常感谢
7. oline01 | September 3, 2007 at 4:31 pm | #
问个问题,在 .htaccess 中加入的那个语句顺序有没有关系?
8. Denis | September 3, 2007 at 4:40 pm | #
@ oline01,没有!
9. ehaagwlke | September 3, 2007 at 6:26 pm | #
FF传的值就是经过urlencode的了,你再urlencode了一次吧?
本地试验了一下,把encodeURIComponent改成了decodeURIComponent就没问题了
10. paopao | September 3, 2007 at 6:44 pm | #
@雪山飞猪 我说的转码是修改WordPress的搜索程序,.htaccess确实不好改的,只是在它转发过来以后再处理
11. Denis | September 3, 2007 at 7:41 pm | #
我说存在的问题是在 FF 地址栏直接输入 http://fairyfish.net/search/中文词 不行,这样好像和程序没有关系吧?
12. paopao | September 3, 2007 at 10:44 pm | #
有吧,FF地址栏直接输入中文会自动以GBK编码,而搜索程序是以utf-8编码的,所以说到底还是个编码方式问题
13. 沈蚊 | September 4, 2007 at 6:53 pm | #
如果是这样的话,是不是在搜索框处就可以处理一下啊?
14. 有鱼外贸 | November 28, 2007 at 11:50 pm | #
ie里面可以啊,确实很牛啊.请问是不是search_pro_5096.html?p=12 这样的没办法Rewrite成search_pro.do?catid=$1&p=$2?就是说Rewrite的前面必须以html为结尾.问题问得不专业,别笑话:)
15. 有鱼外贸 | November 29, 2007 at 1:09 pm | #
就这段代码,那生成的翻页是search_pro_5096.html?p=12 而不是search_pro_5096_12.html,代码如下
请问我怎样调整才能实现这样的效果search_pro_5096_12.html