PHP 将表单重定向到自定义 URL
PHP Redirect Form to Custom URL
我有一个用于重定向搜索结果页面的 .htaccess 代码。
RewriteRule ^search/([a-zA-Z0-9\-]+)$ search.php?query= [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 中非常基本的功能并且在所有浏览器中都受支持。您可能会遗漏的事实是,对每个请求都执行了重写规则,这意味着如果您有更多规则(您可能会这样做),则必须 运行 所有请求的所有正则表达式。这是毫无意义的,因为根据您的应用程序,大多数规则只占很少的请求,这意味着您在长 运行 中浪费处理能力,正则表达式是您应该除非别无选择,否则避免使用。我知道浪费可能很小,但是当您最终像这样进行许多微优化时,可能最终会变得很重要。
随便说说。
我有一个用于重定向搜索结果页面的 .htaccess 代码。
RewriteRule ^search/([a-zA-Z0-9\-]+)$ search.php?query= [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 中非常基本的功能并且在所有浏览器中都受支持。您可能会遗漏的事实是,对每个请求都执行了重写规则,这意味着如果您有更多规则(您可能会这样做),则必须 运行 所有请求的所有正则表达式。这是毫无意义的,因为根据您的应用程序,大多数规则只占很少的请求,这意味着您在长 运行 中浪费处理能力,正则表达式是您应该除非别无选择,否则避免使用。我知道浪费可能很小,但是当您最终像这样进行许多微优化时,可能最终会变得很重要。
随便说说。