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

时间:2015-02-09 20:40:42

标签: php forms .htaccess

我有一个用于重定向搜索结果页面的.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

我该怎么做?

2 个答案:

答案 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中的非常基本的功能,并且在所有浏览器中都受支持。您可能缺少的事实是,每个请求都会执行重写规则,这意味着如果您有更多规则(可能需要执行此操作),则必须在所有请求上运行所有正则表达式。这是毫无意义的,因为根据您的应用程序,大多数规则将计入非常少量的请求,这意味着您从长远来看浪费处理能力,正则表达式是您应该避免使用的东西,除非那里别无选择。我知道浪费可能很小但是当你最终做了很多这样的微优化时,可能最终变得非常重要。

只是说。