所以在我的routes.php
文件中作为最后的路线,我有这个:
$route['(:any)'] = '/page/index/$1';
这用于动态页面网址,例如foo/dynamic-page
这里的问题是,如果我有一个名为something.php
的控制器,路由将是foo/something
,并且它不会在routes.php
中手动声明{1}}文件将返回404,因为我认为它会点击(:any)
路径。
问题是:如何在检查动态页面路由之前首先使路由器初始化为静态路由
答案 0 :(得分:1)
路由在order listed中处理。
注意:路由将按照定义的顺序运行。较高的路线总是优先于较低的路线。
因此,如果你(/ any)是你在抓住一个未找到的页面之前的所有内容,只需确保它放在(:any)之前。
E.g。
$routes['foo/something'] = 'something/index';
$routes['(:any)'] = '/page/index/$1';
答案 1 :(得分:0)
试试这个:
$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';
}
或者
$route['(:any)'] = 'pages/view/$1';
您在url
上输入的任何内容都将继续pages/view/$1
$1
此处是您要传递给控制器/方法的参数
$route['login/(:any)'] = 'show/jobs/$1';
您告诉CI,如果您使用login/user
,那么使用show/jobs/usr
之类的任何参数登录的任何内容将继续发送到您的(:any)
(:num)
将匹配所有字符串和整数它只匹配整数参数,如
$route['login/(':num')'] = 'show/jobs/$1'