路由在 CodeIgniter 中无法正常工作

Routing not working as expected in CodeIgniter

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

中写了这个
$route['(\w{2})/(auto|moto)/(.*)'] = '';
$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 controller

中的这个函数
public function prodotto($category, $id, $title){

}

因此,我在 routes.php

中写下了这一行
$route['(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto///";

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

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

"mercatino/prodotto///" 中有多少个目录?默认情况下,我认为 codeigniter 不会进入超过 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///"; //rule 1
$route['(\w{2})/(auto|moto)/(.*)'] = ''; //rule 2
$route['(\w{2})/(auto|moto)'] = $route['default_controller']; //rule 3

通过将 mercatino 规则放在所有其他规则之前并在前面添加 (.*)