Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将表单重定向到自定义URL_Php_Forms_.htaccess - Fatal编程技术网

PHP将表单重定向到自定义URL

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

我有一个.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 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()