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