用于页面的Codeigniter动态URL中断路由

时间:2015-09-28 13:39:21

标签: php codeigniter routes

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

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

这用于动态页面网址,例如foo/dynamic-page这里的问题是,如果我有一个名为something.php的控制器,路由将是foo/something,并且它不会在routes.php中手动声明{1}}文件将返回404,因为我认为它会点击(:any)路径。

问题是:如何在检查动态页面路由之前首先使路由器初始化为静态路由

2 个答案:

答案 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';
}

Answer Source

或者

$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'