我正在建立一个基于 CodeIgniter 的在线商店。我希望 URL 看起来像这样?
http://example.com/[product-category]/[product-name]
问题是也有非产品页面/checkout/step-1
,这些仍然必须工作。实现这一目标的最佳方法是什么?
我正在建立一个基于 CodeIgniter 的在线商店。我希望 URL 看起来像这样?
http://example.com/[product-category]/[product-name]
问题是也有非产品页面/checkout/step-1
,这些仍然必须工作。实现这一目标的最佳方法是什么?
您在路由配置文件 (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
在 application/config/routes.php 中,例如
$route['checkout/(:any)'] = "checkout/test_controller_method/$1";