我的搜索表单如何在没有?的情况下提交到URL?在中间?

时间:2011-10-25 07:36:28

标签: php kohana kohana-routing

我想创建一个搜索表单。

当我输入我的查询并按下提交按钮时,我想提交一个网址 - domain.com/query/there_is_my_query,但该怎么做呢?

如果我将方法更改为GET,则该网址将为domain.com/query/?query=there_is_my_query

但如果我将操作更改为/query/,则在控制器中设置$_POST['search'],该网址将为domain.com/query

修改<!/强>

我想并决定留下以下网址 - domain.com/query/?search=there_is_my_query

4 个答案:

答案 0 :(得分:0)

您可以修改index.php以通过重定向重定向包含$_GET['query']的任何请求,如下所示:

header('Location: http://domain.com/query/' . urlencode($_GET['query']));

或者,一旦用户单击提交按钮,您就需要使用JavaScript来创建新URL。如果你问我,这两种解决方案似乎都不合理。

答案 1 :(得分:0)

为了通知您,搜索引擎不使用搜索表单 所以没有必要让他们对搜索引擎友好。

答案 2 :(得分:0)

以下方法可行,但在Kohana中使用全局数组被认为是不好的做法:

Route::set('query', function ($uri)
        {
            $query_string = $_SERVER['QUERY_STRING'];
            if (preg_match('/query=(.+)/', $query_string, $matches))
            {
                return array(
                    'controller' => 'index',
                    'action' => 'query',
                    'id' => $matches[1],
                );
            }
        }, '(<action>(/<id>))');

问题是Kohana的路由系统不适用于查询字符串。如果你真的需要这样做,那么你必须使用mod_rewrite将Kohana中的逻辑移出到.htaccess文件中。

答案 3 :(得分:-2)

您可以使用Apache rewrite模块将请求重定向到某个点(引导程序)。这个引导程序将解析URL,它将获得参数。