mod重写搜索表单GET vs POST ACTION

moo*_*ker 0 html php 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>
Run Code Online (Sandbox Code Playgroud)

我的.htaccess文件包含搜索页面的重写规则:

RewriteRule ^search/([^/]*)$ search.php?mode=$1 [L]
Run Code Online (Sandbox Code Playgroud)

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

search/search?SearchInput=moonwalker
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

在此先感谢您的帮助!

Bol*_*wyn 5

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

RewriteRule ^search/([^/]*)$ search.php?mode=$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)

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

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