WordPress Search Permalink

WP的Permalink(永久链接)做的相当完善,我见过所有php程序最好的

1.高度可自定义.单篇文章页,日期存档,分类存档,Tag存档页的永久链接形式都可以自定义.

2.根据Host自动重定向.例如把www.abc.com/$1 重定向到abc.com/$1

3.末尾自动去除或添加”/” .例如你永久链接是 /%post_id%形式 .当有人访问 your-blog.com/34/时会被重定向到 your-blog.com/34

骨头里挑刺的话,还是有不足.就是搜索结果页的永久链接.

WordPress默认通过表单提交的搜索,结果页地址是 http://blog.name/?s=keyword 形式 . 但实际上WP已经内置了Search permalink .通过直接在地址栏输入http://blog.name/search/keyword ,也能访问搜索结果 .其中 “search”这个字段由 wp-includes/rewrite.php 中的 $search_base变量定义,可自行修改.

通过Search Permalink这个插件,可以使默认表单提交的搜索地址变成 http://blog.name/search/keyword/ 形式.这个插件很简单,客户端使用JS监控表单submit,服务器端重定向/?s=keyword地址到 /search/keywords/形式.

现在我想做的是

1.把安装Search Permalink后的搜索页面地址由 /search/keyword/ 变为 /search/keyword 形式
2.当有人输入/search/keyword/时,自动重定向到/search/keyword (去掉末尾 /)

前者很容易做到,事实上只要修改Search permalink插件的两个地方即可.但是我始终找不到如何做到第二点.事实上这是WordPress内部设置,与Search Permalink插件无关.即无论你永久链接设置如何.访问 http://your-blog.com/search/keyword 和 http://your-blog.com/search/keyword/都会返回 Http 200 OK.而不会发生301重定向.

SEO的首要原则是URL唯一化.网站的任何页面在正式发布时只能有一个标准URL,其他所有别名地址都应该被重定向到标准URL.我仔细看了 wp-includes/rewrite.php 文件,没有找到可以解决这个问题的地方.最后,不得不使用.htaccess大神 :

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/search/(.*)/$
RewriteRule ^(.*)/$ http://oogami.name/$1 [R=301,L]
</IfModule>

把上面代码加到 Blog根目录 .htaccess文件中.注意添加到WordPress本身的rewrite语句之前.(如果WP不是安装在域名根目录对应修改RewriteBase和重写规则).

当有人输入 http://oogami.name/search/keyword/时, Apache将重定向到http://oogami.name/search/keyword .这正是我们想要的效果.

PS:这个方法用的是Apache级别的URL重写.事实上应该能通过修改WP自身的代码来解决.然本人能力有限 – -..

0 Responses to “WordPress Search Permalink”


Comments are currently closed.