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-r6
在Mercatino
控制器
public function prodotto($category, $id, $title){
}
因此,我在routes.php中写了这一行
$route['(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto/$2/$3/$4";
但我得到404错误。知道如何解决这个问题吗?
答案 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 class
和fetch_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
规则放在所有其他规则之前,然后再添加(.*)
。