【问题标题】:CodeIgniter turn off automatic routing?CodeIgniter 关闭自动路由?
【发布时间】:2012-12-11 09:39:18
【问题描述】:

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

【问题讨论】:

  • Codeigniter 没有 automatic 这样的路由。如果你有一个名为shop 的控制器和一个名为cart 的动作,那么你就有一个/shop/cart 的路由。如果您想为shopping-cart 创建路由,那么您只需链接到shopping-cart 而不是/shop/cart。这样,任何人都很少有机会知道/shop/cart 的存在。

标签: php codeigniter


【解决方案1】:

记住戴尔的解决方案:

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

仅适用于单段 URL,例如:

example.com/foo

但不适用于:

example.com/foo/bar

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

$route['(.*)'] = "none";

【讨论】:

    【解决方案2】:

    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 错误

    【讨论】:

    • 我认为他担心重复的内容而不是不匹配的 uri
    • 更重要的是,您有 404_override 路由。
    【解决方案3】:

    嗯,另一种解决方案可能是扩展Router

    1. 在 /application/core/MY_Router 创建一个类名 MY_Route,声明为 class MY_Router extends CI_Router
    2. 你可以重写方法_set_routing():

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

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

    【讨论】:

      【解决方案4】:

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

      $routes->setAutoRoute(false);
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-28
          • 1970-01-01
          • 2016-04-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多