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.