路由在CodeIgniter中未按预期工作

时间:2015-01-29 12:44:14

标签: php codeigniter routing

mywebsite.com/it/moto/应重定向到主页。因此我在routes.php

中写了这个
$route['(\w{2})/(auto|moto)/(.*)'] = '$3';
$route['(\w{2})/(auto|moto)'] = $route['default_controller'];

效果很好。此外,mywebsite.com/it/moto/mercatino路由到Mercatino控制器,这是完美的。

不,我希望此mywebsite.com/it/moto/mercatino/componenti-veicolo/221/molle-originali-r6Mercatino控制器

中路由到此功能
public function prodotto($category, $id, $title){

}

因此,我在routes.php中写了这一行

$route['(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto/$2/$3/$4";

但我得到404错误。知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

$route['(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto/$2/$3/$4";

“mercatino / prodotto / $ 2 / $ 3 / $ 4”中有多少个目录?默认情况下,codeigniter我认为不会进入超过2级的目录。

我的意思是,当codeigniter查找文件时,它假设控制器内只能有一个目录。所以,如果你有controllers/d1/file.php你很好,但是如果你有controllers/d1/d2/file.php它将不适用于CI的默认行为。

要使其有效,您可能必须覆盖Router classfetch_directory函数或_validate_request函数。

答案 1 :(得分:0)

解决这个问题

$route['(.*)/(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto/$3/$4/$5"; //rule 1
$route['(\w{2})/(auto|moto)/(.*)'] = '$3'; //rule 2
$route['(\w{2})/(auto|moto)'] = $route['default_controller']; //rule 3

mercatino规则放在所有其他规则之前,然后再添加(.*)