0

示例:此加载具有功能的默认控制器/类page

www.example.com/page

除非我们有控制器/类命名page并设置$route['page'] = 'page';它会加载控制器。但是如果我们不设置$route,它仍然会加载 default_controller。

controller这是真的$route['']吗?即使没有同名的默认控制器功能,是否page也无法在不设置的情况下加载控制器?$route['']

编辑:

我访问

www.mysite.com/index.php/user

我确实有userindex功能的控制器,但我的路由文件只包含:

$route['default_controller'] = 'page';
$route['(:any)'] = 'page/$1';
$route['product'] = 'product';
//$route['user'] = 'user';
$route['404_override'] = '';

返回404,仅在我取消注释时才有效:$route['user'] = 'user';

为什么?

谢谢。

4

1 回答 1

2

不,那不是真的。默认情况下,CodeIgniter直接将 URI 段映射到:

example.com/index.php/controller/method/param/param/...

或者,如果您有一个 .htaccess / 类似的解决方案来删除 index.php:

example.com/controller/method/param/param/...

当您希望使用不直接映射到此约定的 URL 时,将使用路由。

编辑:您有冲突的路线。CodeIgniter 将按从上到下的顺序查看每条路由,如果找到匹配的,它将停止查找并处理该路由。因为你有一个(:any)包罗万象的路线,它会匹配任何东西(就像它说的那样)。

经验法则是首先放置最具体的路线,然后再获得更通用和全面的路线。您的(:any)路线应该是您列表中的最后一条。并且默认控制器和 404 覆盖应该保留在第一位。

$route['default_controller'] = 'page';
$route['404_override'] = '';

$route['product'] = 'product';
$route['user'] = 'user';
$route['(:any)'] = 'page/$1';

您需要添加productuser路由,因为您已经定义了(:any)路由。如果您想避免为每个现有控制器编写路由规则,但仍要利用包罗万象的控制器,请考虑改用404_override控制器/方法。您可以进行验证以检查 URI 在此处是否有效。如果没有,请确保抛出 404 错误(您可以使用show_404()),因为任何不存在的 URL 都会被路由到那里。

于 2013-04-02T05:24:39.080 回答