用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2616|回复: 3
收起左侧

[已解决] 求复杂URI 路由写法

[复制链接]
发表于 2012-1-11 20:58:03 | 显示全部楼层 |阅读模式
本帖最后由 smartweb 于 2012-1-12 11:24 编辑

例如:$route['[a-z]{2}/home'] = "main";
是任意2个字符/home就会直接执行control main
如果我想是任意个数的字符/home就直接执行control main
我又该怎样写那条router呢?





解决:
$route['[A-Za-z0-9]{0,100}/home'] = "main";
第一个参数为数字和字母组合的,1到100位的。
只能是数字和字母组合,不能有空格或其它符号
 楼主| 发表于 2012-1-11 21:00:38 | 显示全部楼层
$route['[a-z,1-9]{5}/home'] = "main";
是指任意5位的数或字符。
我的想法是做无限语种的路由,第一个参数是语言标识,长度可能是两位或N位。
 楼主| 发表于 2012-1-11 21:30:14 | 显示全部楼层
<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/*
| -------------------------------------------------------------------------
| URI ROUTING
| -------------------------------------------------------------------------
| This file lets you re-map URI requests to specific controller functions.
|
| Typically there is a one-to-one relationship between a URL string
| and its corresponding controller class/method. The segments in a
| URL normally follow this pattern:
|
|        example.com/class/method/id/
|
| In some instances, however, you may want to remap this relationship
| so that a different class/function is called than the one
| corresponding to the URL.
|
| Please see the user guide for complete details:
|
|        http://codeigniter.com/user_guide/general/routing.html
|
| -------------------------------------------------------------------------
| RESERVED ROUTES
| -------------------------------------------------------------------------
|
| There area two reserved routes:
|
|        $route['default_controller'] = 'welcome';
|
| This route indicates which controller class should be loaded if the
| URI contains no data. In the above example, the "welcome" class
| would be loaded.
|
|        $route['404_override'] = 'errors/page_missing';
|
| This route will tell the Router what URI segments to use if those provided
| in the URL cannot be matched to a valid route.
|
*/

$route['default_controller']        = "cart";

//this for the admininstration console
$route['admin']                                        = 'admin/dashboard';

//get routes from database
include('database.php');

if($db[$active_group]['pconnect'])
{
        mysql_pconnect($db[$active_group]['hostname'],$db[$active_group]['username'],$db[$active_group]['password']);       
}
else
{
        mysql_connect($db[$active_group]['hostname'],$db[$active_group]['username'],$db[$active_group]['password']);       
}
mysql_select_db($db[$active_group]['database']) or die("Unable to select database");

$routes        = mysql_query('SELECT * FROM '.$db[$active_group]['dbprefix'].'routes');

while($row = mysql_fetch_array($routes))
{
        //if "category" is in the route, then add some stuff for pagination
        if(strpos($row['route'], 'category'))
        {
                $route[$row['slug']] = $row['route'];

                $row['slug']         .= '/(:num)';
                $row['route']         .= '/$1';
        }
        $route[$row['slug']] = $row['route'];
}

mysql_free_result($routes);


//in case we're using pconnect
mysql_close();
 楼主| 发表于 2012-1-12 10:37:25 | 显示全部楼层
解决。
原来可以用PHP正则表达式,写成
$route['[a-z,1-9]{1,100}/home'] = "main";

就是说第一个参数,可以是数字和字母组合的一到100位的。

本版积分规则