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';
}
或这个
$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/'
所以在我的 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';
}
或这个
$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/'