PHP将表单重定向到自定义URL
我有一个.htaccess代码用于重新接收搜索结果页PHP将表单重定向到自定义URL,php,forms,.htaccess,Php,Forms,.htaccess,我有一个.htaccess代码用于重新接收搜索结果页 RewriteRule ^search/([a-zA-Z0-9\-]+)$ search.php?query=$1 [L,NC] 因此,当您转到/search/blabla时,只需转到search.php?query=blabla 它能用,没问题。当我写地址栏/search/blabla时,它会显示结果 问题是,当我使用搜索表单时,它会将我发送到search.php?query=blabla(没有意外) 这是我的表格代码: <form
RewriteRule ^search/([a-zA-Z0-9\-]+)$ search.php?query=$1 [L,NC]
因此,当您转到/search/blabla时,只需转到search.php?query=blabla
它能用,没问题。当我写地址栏/search/blabla时,它会显示结果
问题是,当我使用搜索表单时,它会将我发送到search.php?query=blabla(没有意外)
这是我的表格代码:
<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/query而不是search.php?query=query
如何执行此操作?在先前的规则之前插入此重定向规则:
RewriteCond %{THE_REQUEST} \s/+search\.php\?query=([^\s&]+) [NC]
RewriteRule ^ /search/%1? [R=302,L,NE]
我也遇到了同样的问题,最终我使用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中非常基本的功能,并且在所有浏览器中都受支持。您可能缺少的事实是,重写规则在每个请求上都会执行,这意味着如果您有更多的规则,那么它将不得不在所有请求上运行所有正则表达式。这是毫无意义的,因为取决于您的应用程序,大多数规则只对非常少量的请求起作用,这意味着您在长期浪费处理能力,除非别无选择,否则应该避免使用正则表达式。我知道浪费可能很小,但当你最终做了很多像这样的微优化时,它最终可能会变得非常重要
只是说说而已。我喜欢JS的想法。但是,当我搜索w、a、a、h、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、a、B、a、a、a、B。你能推荐一个正则表达式来清理字符串,使其仅为a-zA-Z0-9吗?@Diga你至少需要一次重写,这将是你的单一入口点。还要注意,您需要在查询字符串上使用
encodeURIComponent()
。