【问题标题】:Codeigniter routes not working as expectedCodeigniter 路由未按预期工作
【发布时间】:2019-07-15 19:15:42
【问题描述】:

我很困惑,因为这方面的文档非常简单明了,我一定遗漏了一些东西。

我有控制器,我使用routes.php 路由到这样的控制器。

$route['users'] = '/usermanager'; 这按预期工作,导航到 mysite/users 呈现我的控制器。

我有一些前端路由来处理用户页面上的不同选项卡,所以 url 可以有一些子路由,如/users/management。这一切的逻辑都在前端处理,我需要/users 下的任何东西路由到同一个控制器

所以我这样写: $route['/users/(:any)'] = '/usermanager';

这失败了,我被定向到我的 404 页面。 我还尝试明确指定我的路线: $route['/users/management'] = '/usermanager';

仍然没有骰子。我对这个路由功能有什么不明白的地方。

这是我的完整 routes.php 以防我遗漏了一些东西:

$route['default_controller'] = 'EdgeView';
$route['404_override'] = 'PageNotFound';
$route['translate_uri_dashes'] = FALSE;

$route['view'] = '/';
$route['list'] = '/';
$route['pictorial'] = '/';
$route['certificate'] = '/';
$route['files'] = '/';
$route['about'] = '/';
$route['contact'] = '/';

$route['users'] = '/usermanager';
$route['/users/(:any)'] = '/usermanager';

【问题讨论】:

    标签: php codeigniter routing codeigniter-3


    【解决方案1】:

    删除路径中的前导斜杠。

    改变这个

    $route['/users/(:any)'] = '/usermanager';
    

    到此

    $route['users/(:any)'] = 'usermanager';
    

    【讨论】:

    • 您还应该指定路由到的方法:$route['users/(:any)'] = 'usermanager/index';
    • Arrrgh,我不敢相信我错过了,非常感谢。
    【解决方案2】:

    我不确定我是否理解,但假设您的控制器是usermanager,您必须指定组的位置:

    $route['/users/(:any)'] = '/usermanager/$1';
    

    所以,如果一个请求是/users/testing 会像/usermanager/testing

    【讨论】:

    • 这仍然不适合我,/users 之后的任何路由都会给我一个 404 错误。
    【解决方案3】:

    确保您使用 Codeigniter 提供的 .htaccess 文件并将其放置到您的根应用中。

    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
    

    另存为.htaccess

    路由的逻辑是。您将 Welcome.php 作为默认控制器。如果您要路由自定义控制器,请执行以下操作。

    $route['default_controller'] = 'welcome' //where execute the Welcome/index
    

    例子:

    $route['login'] = 'Auth/login'

    您只需调用登录到您的网址,它将动态执行 Auth/login

    【讨论】:

      【解决方案4】:

      Codeigniter 大多数人都使用这 3 种路线

      //简单路线

      $route['login'] = 'Login/index';

      //通过id或编号的路径

      $route['product/(:num)'] = 'catalog/product_lookup_by_id/$1';

      //通过任何路线

      $route['product/(:any)'] = 'catalog/product_lookup';

      // 在路由中传递蜕皮值

      $route['product/(:any)/(:any)'] = 'catalog/product_lookup';

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-04
        • 2014-05-02
        • 1970-01-01
        • 2016-08-19
        • 2015-09-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多