lennyleng 发表于 2013-9-10 02:28:48

URI路由问题

现在是这么一个情况,一个系统的后台:
控制器文件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']
增加符号 ! 就可以了
原:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\&';
改:
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-\&\!';

lennyleng 发表于 2013-9-10 11:45:37

魔鬼 发表于 2013-9-10 09:56 static/image/common/back.gif
在文件 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(); 就失效了?
有没有试过把这条规则向下移动一下.结果怎么样?

lennyleng 发表于 2013-9-10 20:56:51

魔鬼 发表于 2013-9-10 15:05 static/image/common/back.gif
你的意思是加上 $route['admin(.*)'] = show_404(); 就失效了?
有没有试过把这条规则向下移动一下.结果怎么 ...

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


kinwyb 发表于 2013-9-11 09:39:48

这样写法有问题吧$route['admin(.*)']
如有规则里有这种写法么?
用$route['admin(:any)']和$route['admin/(:any)']试试。。

lennyleng 发表于 2013-9-11 16:50:20

kinwyb 发表于 2013-9-11 09:39 static/image/common/back.gif
这样写法有问题吧$route['admin(.*)']
如有规则里有这种写法么?
用$route['admin(:any)']和$route['admin ...

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

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


魔鬼 发表于 2013-9-12 11:09:35

lennyleng 发表于 2013-9-10 20:56 static/image/common/back.gif
试过了,不行。按照手册上说“ 路由将会按照定义的顺序来运行.高层的路由总是优先于低层的路由.”应该是 ...

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

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


lennyleng 发表于 2013-9-12 12:58:22

魔鬼 发表于 2013-9-12 11:09 static/image/common/back.gif
移到下面也不行?
那是不是说如果用 show_404(); 要优先其它规则?



最后我还是定义了一个error控制器,,,,{:soso_e150:}
页: [1]
查看完整版本: URI路由问题