3

是否可以关闭 CodeIgniter 中的自动路由并让它仅在存在该请求的路由时处理请求?谢谢。

4

5 回答 5

10

请记住,戴尔的解决方案:

$route['(:any)'] = "some/default/controller/$1";

仅适用于单段 URL,例如:

example.com/foo

但不适用于:

example.com/foo/bar

您可以通过使用正则表达式而不是 CI 通配符来解决此问题。并且通过路由到一个不存在的类确实会删除 show_404() :

$route['(.*)'] = "none";
于 2015-05-22T21:56:56.117 回答
3

AFAIK 你不能关闭 CI 的自动路由,但是有一个解决方法:

// you specific routes
$route['admin/(:any)'] = "admin/$1";
$route['search/(:any)'] = "search/$1";
// the catch all route
$route['(:any)'] = "some/default/controller/$1";

这实际上并没有关闭 CI 的路由,而是将所有不匹配的 uri 路由到默认控制器。

或者,您可以路由到一个不存在的控制器,我相信它会抛出内置的 404 错误

于 2012-12-11T10:07:16.000 回答
2

好吧,另一种解决方案可能是扩展Router.

  1. 在 /application/core/MY_Router 创建一个类名 MY_Route,声明为class MY_Router extends CI_Router.
  2. 您可以覆盖该方法_set_routing()

    此函数根据 URI 请求以及在路由配置文件中设置的任何“路由”确定应提供的服务。

它应该更复杂,但至少可以引导您找到另一个解决方案。

于 2012-12-11T14:44:29.893 回答
0

Codeigniter 4 解决方案:
第 24 行的 app/config/Routes.php 将值 true 设置为 false

$routes->setAutoRoute(false);
于 2021-09-10T17:44:50.750 回答
-1

不,据我所知,不可能在 CodeIgniter 中关闭自动路由约定,但是您可以在 .htaccess 文件中添加条目以将默认路由重定向到您创建的路由。

于 2012-12-11T10:05:24.790 回答