2011-03-02 17 views
0

嗨,並感謝您抽出這個問題的時間。國防部重寫搜索表GET與戰後行動

我正在使用jQuery進行實時搜索的搜索表單。搜索欄位於我網站的每個頁面上,工作正常。現在我想擴展它。當人們敲回車鍵時,我希望他們被重定向到搜索頁面,在那裏他們得到所有結果。

唯一的問題是Get方法不工作。 我的形式看起來像這樣:

<form action="search/search" id="Searchform" method="GET"> 
<p><input type="text" name="SearchInput" id="SearchInput" value="" onkeyup="lookup(this.value);" /></p> 
<div class="clear"></div> 
<div id="suggestions"></div> 
</form> 

我的.htaccess文件包含了搜索頁面此重寫規則:

RewriteRule ^search/([^/]*)$ search.php?mode=$1 [L] 

埃維一次我打回車鍵,我得到這樣的:

search/search?SearchInput=moonwalker 

而使用GET方法,我似乎無法得到SearchInput的值。

使用POST方法時,一切正常。但我讀過不同的文章,我真的應該使用GET方法進行搜索。

所以我的問題是:爲什麼我應該使用搜索頁面的GET方法?如果我決定使用POST而不是GET方法有什麼大的優點嗎?

我知道我可以使用重定向等來完成這與GET方法,但我只是想知道爲什麼POST在搜索表單中被認爲是不好的做法。

在此先感謝您的幫助!

回答

5

您需要重新追加查詢字符串:以上

RewriteRule ^search/([^/]*)$ search.php?mode=$1 [L,QSA] 

QSA確實神奇。否則,?後的URL中的所有內容都將被截斷,並替換爲新的查詢字符串?mode=foo

回答這個問題:出於以下幾個原因,使用GET進行非轉換查詢(所有隻創建視圖)和更改請求(如發佈評論或新產品)都是POST的好習慣。 Eric Petroelje在他的回答中給出了一些理由。當你的谷歌爲REST + GET + POST時,可以找到其他人。 (這導致,例如,以這種SO question

+0

好吧,現在是GET方法正常工作。非常感謝解決方案。 – moonwalker 2011-03-02 17:02:49

+1

不客氣。我建議你在我的回答中閱讀鏈接SO問題中的答案,以便更深入地瞭解爲什麼以及何時使用一種方法。 – Boldewyn 2011-03-02 17:04:11

+0

太棒了。非常感謝Boldewyn,我將首先閱讀鏈接。 – moonwalker 2011-03-02 17:07:31

4

幾個原因關閉爲什麼要使用GET搜索屏幕我的頭頂:

  1. 它使人們能夠書籤/鏈接到搜索,或者將搜索發送給其他人。
  2. 它允許搜索爲indexed by Google。 Googlebot不會提交POST表單。
+1

3.它不會產生「你真的想再次發送請求嗎?「刷新時的瀏覽器消息,正如POST請求所做的那樣 – Czechnology 2011-03-02 17:02:36

+0

好的答案+1 – Boldewyn 2011-03-02 17:02:55

+0

現在我明白了爲什麼我應該使用GET方法,其實你提到的很好的理由,非常感謝。 – moonwalker 2011-03-02 17:03:36