2

我正在建立一个基于 CodeIgniter 的在线商店。我希望 URL 看起来像这样?

http://example.com/[product-category]/[product-name]

问题是也有非产品页面/checkout/step-1,这些仍然必须工作。实现这一目标的最佳方法是什么?

4

2 回答 2

3

您在路由配置文件 (application/config/routes.php) 中定义的路由按照定义的顺序执行。如果您首先输入更具体的路线,那么最后可以采用通用的包罗万象的路线。

$routes['checkout/step_(\d+)'] = 'checkout/step_$1';
// calls the checkout class, step_x method

$routes['(.*)/(.*)'] = 'product_class/product_method/$1/$2';
// calls the product class, and product method, passing category and name as parameters

这种方法的缺点是您必须在此文件中定义所有路由,即使是直接映射到控制器/动作的路由。更好的方法可能是让您的产品路线以“产品”开头,以便它们看起来像这样:

http://example.com/products/[产品类别]/[产品名称]

使用这种方法,您可以定义一个仅适用于如下产品的路由规则:

$routes['products/(.*)/(.*)'] = 'product_class/product_method/$1/$2';

这更好,因为它不会强制您为站点中的每个控制器/动作组合定义创建路由。

http://ellislab.com/codeigniter/user-guide/general/routing.html

于 2013-02-01T15:14:38.320 回答
2

在 application/config/routes.php 中,例如

$route['checkout/(:any)'] = "checkout/test_controller_method/$1";
于 2013-02-01T15:14:44.380 回答