我有这些路由:
$route['shop/(:any)/(:any)'] = 'product/category_listing/$1/$2';
$route['shop/(:any)/(:any)/(:any)'] = 'product/product_listing/$1/$2/$3';
当我调用url:
http://mysite.com/shop/mens/trainers/a-product应该调用product_listing方法,但第一个方法(category_listing)被调用,而product_listing从未被调用。
我怎样才能使它按要求工作?
数组元素顺序重要!
关键字(:any)
匹配所有内容,甚至斜杠,因此在您的示例中,CodeIgniter找到第一个匹配路由,并且不再查找任何进一步的路由。
那么,如果我们这样做:
$route['shop/(:any)/(:any)/(:any)'] = 'product/product_listing/$1/$2/$3';
$route['shop/(:any)/(:any)'] = 'product/category_listing/$1/$2';
…然后首先匹配产品列表,然后是其他所有内容。
甚至,您可以使用正则表达式(例如([a-z0-9]+)
)来创建您需要的规则