2015-02-09 133 views
1

我有一個用於重定向搜索結果頁面的.htaccess代碼。將PHP重定向到自定義URL

RewriteRule ^search/([a-zA-Z0-9\-]+)$ search.php?query=$1 [L,NC] 

所以當你去/搜索/布拉布拉你乾脆去的search.php?查詢=布拉布拉

它的工作原理,沒有任何問題。當我寫地址欄/搜索/ blabla它顯示結果。

的問題是,當我用我的搜索形式,它發送我的search.php查詢=布拉布拉(沒有驚喜)

這裏是我的表單代碼:

<form id="search" name="search" action="search.php" method="get"> 
    <table> 
     <tr> 
      <td><input type="text" size="20" maxlength="100" name="query" id="query"></td> 
      <td><input type="submit" value="Search"></td> 
     </tr> 
    </table> 
</form> 

我想這表單重定向我搜索/查詢不search.php?查詢=查詢

我該怎麼做?

回答

1

我有同樣的問題,我結束了在使用JavaScript攔截提交做。

form.onsubmit = function(){ 
    var url = 'http://example.com/search/query'; 
    // obviously you will have some logic generating the url 

    window.location = url; 
    return false; 
} 

有點解釋。

我不認爲需要重寫規則,因爲這是JavaScript中非常基本的功能,並且在所有瀏覽器中都受支持。您可能會遺漏的事實是,對每一個請求執行重寫規則,這意味着如果您有更多的規則,您可能會這樣做,它將不得不在所有請求上運行所有正則表達式。這是毫無意義的,因爲根據您的應用程序,大多數規則只會計算極少量的請求,這意味着您從長遠來看浪費了處理能力,正則表達式是您應該避免使用的東西,除非存在是別無選擇。我知道浪費可能會很小,但是當你最終做出許多微觀優化時,如可能最終會變得非常重要。

只是說。

+0

我喜歡JS的想法。但是當我搜索w҉̤̖͎̘h̰̝̬̺a̦̯a̺̖̘a̭̰̳̟̦̩時,我找不到404。你能建議一個正則表達式來清理字符串,使它只有a-zA-Z0-9嗎? – Diga 2015-02-09 21:40:47

+0

@Diga你需要至少一個重寫,這將是你單一的入口點。還要注意,你需要在查詢字符串上使用'encodeURIComponent()'。 – 2015-02-09 22:44:01

1

你剛纔的規則之前插入此重定向規則:

RewriteCond %{THE_REQUEST} \s/+search\.php\?query=([^\s&]+) [NC] 
RewriteRule^/search/%1? [R=302,L,NE]