路由在代码点火器中未按预期工作


Routing not working as expected in CodeIgniter

mywebsite.com/it/moto/应该重定向到主页。因此,我在路线中写了这篇文章.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-r6路由到控制器内的此功能Mercatino

public function prodotto($category, $id, $title){
}

因此,我在路线中写了这行.php

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

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

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

"mercatino/prodotto/$2/$3/$4"中有多少个目录?默认情况下,我认为代码点火器不会进入超过 2 级的目录。

我的意思是,当codeigniter查找文件时,它假设控制器中只能有一个目录。因此,如果您有controllers/d1/file.php则可以,但是如果您有controllers/d1/d2/file.php则它不适用于CI的默认行为。

要使其正常工作,您可能必须覆盖Router classfetch_directory函数或_validate_request函数。

以这种方式解决

$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规则放在所有其他规则之前,并在之前添加(.*)