如何针对某些请求缩短Codeigniter中的路由?

时间:2013-02-13 06:37:35

标签: codeigniter url-rewriting

我有一个页面有这个类别的URL website.com/category/view/honda-red-car我只是想让它说http://website.com/honda-red-car没有html或php并且摆脱了类别视图URL ..此网站已使用CodeIgniter框架完成..

此产品查看网址:http://www.product/details/13/honda-accord-red-car 我希望它成为website.com/honda-accord-red-car请帮助!!!

我无法找到关于我做错的正确指示?

2 个答案:

答案 0 :(得分:2)

查看用户指南的URI Routing部分。

如果您想要路由具体的网址集,那么通过向application/config/routes.php添加规则,您应该能够达到您想要的效果。

如果您想要一些通用解决方案(任何uri段可以是product/details页面),那么您可能需要将所有其他URL明确添加到routes.php配置文件并设置一个包罗万象的规则将一切都路由到正确的控制器/方法。记得处理404网址!

<强>示例:
让我们说/honda-red-car是特别的,你只想在你写的内部重定向这个:

$routes['honda-red-car'] = 'product/details/13/honda-accord-red-car';

如果您想要概括以honda-字符串开头的所有内容:

$routes['(honda-.*)'] = 'product/details_by_slug/$1'; // imaginary endpoint

这些规则在preg_replace()调用内部使用,作为模式传入密钥,值作为替换字符串,因此()用于捕获组,$1用于放置捕获部分。

小心模式,如果它们过于笼统,它们可能会捕获每个请求,所以:

$routes['(.*)'] = 'product/details_by_slug/$1';

虽然它肯定适用于任何汽车名称,例如suzuki-swift-car,但它也会捕获普通的根网址或product/details/42请求。

这些规则从上到下进行了评估,因此请从顶部的特定规则开始,并在文件末尾留下一般规则。

答案 1 :(得分:2)

在Routes.php中你需要创建一个这样的

$route['mycar'] = "controller_name/function_name";

因此,对于您的示例,它将是:

$route['honda-red-car] = "category/view/honda-red-car";