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

[HELP] URI路由问题

[复制链接]
发表于 2013-9-10 02:28:48 | 显示全部楼层 |阅读模式
现在是这么一个情况,一个系统的后台:
控制器文件admin.php 类名是Admin
为了防止后台被猜解到路径准备使用4dm!n来代替。可是这个类名首先不支持。
想到了用URL路由,
$route['admin'] = show_404();
$route['4dm!n'] = 'admin';
但是不成功。请大牛指教
发表于 2013-9-10 09:56:35 | 显示全部楼层
本帖最后由 魔鬼 于 2013-9-10 09:57 编辑

在文件 config.php 找到 $config['permitted_uri_chars']
增加符号 ! 就可以了
原:
PHP复制代码
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\&';
复制代码

改:
PHP复制代码
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\&\!';
复制代码
 楼主| 发表于 2013-9-10 11:45:37 | 显示全部楼层
魔鬼 发表于 2013-9-10 09:56
在文件 config.php 找到 $config['permitted_uri_chars']
增加符号 ! 就可以了
原:

谢谢!感叹号这点我之前注意到了。
现在用的正则去匹配,

$route['admin(.*)'] = show_404();
$route['4dm!n(.*)'] = 'admin$1';


发现第一句会让我4dm!n访问也变成404,注释掉 则正常。
$route['admin(.*)'] = show_404();该怎么修改呢?
发表于 2013-9-10 15:05:09 | 显示全部楼层
你的意思是加上 $route['admin(.*)'] = show_404(); 就失效了?
有没有试过把这条规则向下移动一下.结果怎么样?
 楼主| 发表于 2013-9-10 20:56:51 | 显示全部楼层
魔鬼 发表于 2013-9-10 15:05
你的意思是加上 $route['admin(.*)'] = show_404(); 就失效了?
有没有试过把这条规则向下移动一下.结果怎么 ...

试过了,不行。按照手册上说“ 路由将会按照定义的顺序来运行.高层的路由总是优先于低层的路由.”应该是对的。


发表于 2013-9-11 09:39:48 | 显示全部楼层
这样写法有问题吧$route['admin(.*)']
如有规则里有这种写法么?
用$route['admin(:any)']和$route['admin/(:any)']试试。。
 楼主| 发表于 2013-9-11 16:50:20 | 显示全部楼层
kinwyb 发表于 2013-9-11 09:39
这样写法有问题吧$route['admin(.*)']
如有规则里有这种写法么?
用$route['admin(:any)']和$route['admin ...

是支持的。$route['admin/(:any)']必须在admin后面字段要必须存在,这个用有局限性。
$route['admin(.*)']是用的正则表达式的方法。下面转一个手册的段落:

正则表达式
如果你喜欢可以使用正则表达式来自定义你的路由规则.  任何有效的正则表达式都是被允许的, 甚至逆向引用.
注意:  如果你使用逆向引用请将双反斜线语法替换为美元符语法(\\1 替换为 $1).
一个典型的正则表达式看起来像下面的样子:
$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";上例中, 类似于 products/shirts/123 的URI 将换成调用 shirts 控制器类的 id_123 方法.
你也可以混合使用通配符与正则表达式.


发表于 2013-9-12 11:09:35 | 显示全部楼层
lennyleng 发表于 2013-9-10 20:56
试过了,不行。按照手册上说“ 路由将会按照定义的顺序来运行.高层的路由总是优先于低层的路由.”应该是 ...

移到下面也不行?
那是不是说如果用 show_404(); 要优先其它规则?

要不,随便指向一个不存在的控制器就算了...


 楼主| 发表于 2013-9-12 12:58:22 | 显示全部楼层
魔鬼 发表于 2013-9-12 11:09
移到下面也不行?
那是不是说如果用 show_404(); 要优先其它规则?

最后我还是定义了一个error控制器,,,,{:soso_e150:}

本版积分规则