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