mod重写搜索表单GET vs POST ACTION

时间:2011-03-02 16:52:24

标签: php html mod-rewrite

您好,感谢您抽出时间来解决这个问题。

我正在使用jQuery进行实时搜索的搜索表单。搜索栏位于我网站的每个页面上,工作正常。现在我想扩展它。当人们点击Enter键时,我希望他们被重定向到搜索页面,在那里他们可以获得所有结果。

唯一的问题是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]

Evey时间我点击Enter按钮我得到了这个:

search/search?SearchInput=moonwalker

使用GET方法我似乎无法获得SearchInput的值。

使用POST方法时一切正常。但我在不同的文章中读到,我真的应该使用GET方法进行搜索。

所以我的问题是:为什么我要将GET方法用于搜索页面?如果我决定使用POST而不是GET方法,有什么大的优势吗?

我知道我可以使用重定向等来完成GET方法,但我只是想知道为什么POST在搜索表单中被认为是不好的做法。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

您需要重新附加查询字符串:

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

上面的 QSA 是神奇的。否则,?之后的网址中的所有内容都会被截断并替换为新的查询字符串?mode=foo

回答这个问题:出于几个原因,优良做法是使用GET(仅创建视图的所有内容)和使用POST更改请求(例如,发布评论或新产品)进行非转换查询。 Eric Petroelje在回答中给出了一些理由。当你谷歌进行REST + GET + POST时,可以找到其他一些。 (这导致例如SO question

答案 1 :(得分:4)

我想知道为什么要在搜索屏幕上使用GET,有几个原因:

  1. 它允许用户为搜索添加书签/链接,或将搜索结果发送给其他人。
  2. 它允许搜索为indexed by Google。 Googlebot不会提交POST表单。