Codeigniter 动态 url 用于页面中断路由

Codeigniter dynamic url for pages breaks routes

所以在我的 routes.php 文件中作为最后一条路线我有这个:

$route['(:any)'] = '/page/index/';

这用于动态页面 url,例如 foo/dynamic-page 这里的问题是,如果我有一个名为 something.php 的控制器并且路由将是 foo/something,它是没有在 routes.php 文件中手动声明它将 return 一个 404 因为我认为它会到达 (:any) 路线。

问题将是:如何让路由器在查看动态页面路由之前先初始化静态路由

路由在 order listed 中处理。

Note: Routes will run in the order they are defined. Higher routes will always take precedence over lower ones.

因此,如果您在抛出未找到的页面之前将 (:any) 全部捕获,只需确保它位于 (:any) 之前。

例如

$routes['foo/something'] = 'something/index';
$routes['(:any)'] = '/page/index/';

试试这个:

$route[ 'default_controller' ]  = 'main';
$route[ '404_override' ]        = 'error404';

require_once( BASEPATH .'database/DB'. EXT );
$db =& DB();
$query = $db->get( 'app_routes' );
$result = $query->result();
foreach( $result as $row )
{
    $route[ $row->slug ]                 = $row->controller;
    $route[ $row->slug.'/:any' ]         = $row->controller;
    $route[ $row->controller ]           = 'error404';
    $route[ $row->controller.'/:any' ]   = 'error404';
}

Answer Source

或这个

$route['(:any)'] = 'pages/view/';

您在 url 上键入的任何内容都将继续 pages/view/ </code> 这里是您要传递给 controller/method</p> 的参数 <pre><code>$route['login/(:any)'] = 'show/jobs/';

你是在告诉 CI 使用 login/user 之类的任何参数登录的任何内容都将继续到你的 show/jobs/usr (:any) 将匹配所有字符串和整数,如果你使用 (:num) 它只会匹配像

这样的整数参数
$route['login/(':num')'] = 'show/jobs/'