【问题标题】:Rewrite ?search=query to /search/query and pagination将 ?search=query 重写为 /search/query 和分页
【发布时间】:2014-09-28 18:41:13
【问题描述】:

我在控制器中的方法可以接收到这个:

domain.com/busqueda/任何东西

这将在我的数据库中搜索“任何内容”并对结果进行分页,因此如果超过一个,则需要第三个值:

domain.com/busqueda/anything/10

“10”将是偏移量。

使用带有 GEt 方法的表单将导致:

domain.com?busqueda=anything

我的控制器不接受。所以我需要将其重写为:

domain.com/busqueda/anything/

并且能够在直接键入或链接时接受偏移值,例如:

domain.com/busqueda/anything/10

当 htaccess 出现时,我很糟糕。我尝试了一些规则,但只在没有“偏移”的情况下工作。

【问题讨论】:

  • 您似乎正在尝试创建某种基本的 REST API。如果这对您有帮助,请告诉我:stackoverflow.com/questions/8291712/….
  • 嗨杰森,不是真的。只是想将查询重写为一个友好的 URL,这样我的控制器就可以使用添加的偏移值对其进行解析,这让我很失望,因为没有它,重写将很容易弄清楚。还是谢谢!

标签: php .htaccess codeigniter mod-rewrite pagination


【解决方案1】:

您可以为表单创建另一个控制器方法,您将在其中获取 GET 参数并进行重定向:redirect('busqueda/'.$this->input->get('busqueda'));


如果出现路由问题:

在 application/config/routes.php 添加:

$route['busqueda/(:any)/(:num)'] = 'busqueda_controller/busqueda_method/$1/$2';
$route['busqueda/(:any)'] = ''busqueda_controller/busqueda_method/$1';

在你的 busqueda_controller/busqueda_method 中只做:

$offset = false; //no offset

if(FALSE !== $this->uri->segment(3)) {
    $offset = (int)$this->uri->segment(3); //I've used casting, because I don't know how CI does it. Maybe it's unnecessary here
}

【讨论】:

  • 谢谢 jacekpl。但是路由和分页运行良好,我的问题是在尝试使用表单进行搜索时出现,这将使用我提到的查询字符串格式化 URL,因此控制器不会接受。这就是为什么我需要在这种情况下重写 URL 以便控制器获取它。希望现在更清晰了。
  • 您可以为表单创建另一个控制器方法,您将在其中获取 GET 参数并进行重定向:redirect('busqueda/'.$this->input->get('busqueda')) ;
  • 聪明的主意 jacekpl!工作完美,只需将配置从 QUERY_STRING 更改为 AUTO 即可获取字符串。谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-12-20
  • 1970-01-01
  • 2011-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-15
  • 2013-08-27
相关资源
最近更新 更多