我有一个用于重定向搜索结果页面的.htaccess代码。
RewriteRule ^search/([a-zA-Z0-9\-]+)$ search.php?query=$1 [L,NC]
所以当你去/ search / blabla你只需去search.php?query = blabla
它有效,没问题。当我写地址栏/搜索/ blabla时,它会显示结果。
问题是,当我使用我的搜索表单时,它会将我发送到search.php?query = blabla(no suprise)
这是我的表单代码:
<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?query = query
我该怎么做?
答案 0 :(得分:1)
在您之前的规则之前插入此重定向规则:
RewriteCond %{THE_REQUEST} \s/+search\.php\?query=([^\s&]+) [NC]
RewriteRule ^ /search/%1? [R=302,L,NE]
答案 1 :(得分: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中的非常基本的功能,并且在所有浏览器中都受支持。您可能缺少的事实是,每个请求都会执行重写规则,这意味着如果您有更多规则(可能需要执行此操作),则必须在所有请求上运行所有正则表达式。这是毫无意义的,因为根据您的应用程序,大多数规则将计入非常少量的请求,这意味着您从长远来看浪费处理能力,正则表达式是您应该避免使用的东西,除非那里别无选择。我知道浪费可能很小但是当你最终做了很多这样的微优化时,可能最终变得非常重要。
只是说。