Php 路由在CodeIgniter中未按预期工作

Php 路由在CodeIgniter中未按预期工作,php,codeigniter,routing,Php,Codeigniter,Routing,mywebsite.com/it/moto/应重定向到主页。因此,我在routes.php中编写了这篇文章 $route['(\w{2})/(auto|moto)/(.*)'] = '$3'; $route['(\w{2})/(auto|moto)'] = $route['default_controller']; $route['(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto/$2/$3/$4"; 这很有

mywebsite.com/it/moto/应重定向到主页。因此,我在routes.php中编写了这篇文章

$route['(\w{2})/(auto|moto)/(.*)'] = '$3';
$route['(\w{2})/(auto|moto)'] = $route['default_controller'];
$route['(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto/$2/$3/$4";
这很有效。另外,mywebsite.com/it/moto/mercatino路由到mercatino控制器,这是完美的

不,我想让这个mywebsite.com/it/moto/mercatino/componenti-veicolo/221/molle-originali-r6路由到mercatino控制器内的这个函数

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

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

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

我的意思是,当codeigniter查找文件时,它假设控制器中只能有一个目录。因此,如果您有controllers/d1/file.php,您就可以了,但是如果您有controllers/d1/d2/file.php,它将无法与CI的默认行为一起工作

要使其正常工作,您可能必须重写Router类并获取目录函数或验证请求函数。

这样解决

$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规则置于所有其他规则之前,并在之前添加。*。

没有目录。/prodotto/之后的所有目录都作为参数传递给prodotto函数,这就是codeigniter所做的。例如,如果您有一个类似/dir1/dir2/dir3/…/dirn/CI的url将访问类dir1,调用函数dir2并将参数/dir3/../dirn/传递给该函数OK,我明白您的意思了。可能您可以尝试删除{1}。可能是CI不支持路由中的该类型正则表达式。不太清楚,我找到了解决办法。看看我的答案