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

[讨论/交流] 2.0不再支持子目录的default_controller了吗?

  [复制链接]
发表于 2011-2-14 22:47:07 | 显示全部楼层 |阅读模式
controllers/目录下有一个子目录test/

我希望访问url:  example.com/test/  的时候能触发controllers/test/目录下的default_controller
但是测试的结果却是:
example.com/  和example.com/test/触发的都是controllers目录下的default_controller

ps: webserver做了rewrite在url中消除了index.php
发表于 2011-2-15 00:37:41 | 显示全部楼层
我试一下,CI 不会把这个基本功能去掉吧。。。。。
 楼主| 发表于 2011-2-15 09:17:25 | 显示全部楼层
楼上测试结果怎么样?我看了一下Router的实现,的确有问题啊
发表于 2011-2-15 11:28:52 | 显示全部楼层
我的测试结果是:和老版本一样,支持子目录的默认控制器。
发表于 2011-2-15 11:51:55 | 显示全部楼层
这个应该还是继续支持的
发表于 2011-2-16 11:11:47 | 显示全部楼层
本帖最后由 pk4321 于 2011-2-16 11:33 编辑

刚刚试过,2.0确实不支持controllers子目录是default_controller!

大家可以试试下载一个1.7.3,然后controllers目录里面新建一个www的文件夹,然后把welcome.php拖进去www文件夹里面
而再下载一个2.0,重复以上做法

然后在地址栏里
http://localhost/ci17/index.php/www/

http://localhost/ci20/index.php/www/

分别试试?!
发表于 2011-2-16 11:51:51 | 显示全部楼层
回复 6# pk4321


    楼上的做法我试过,这种情况是没问题的,出问题的是另外一种情况,就是把根目录下的 welcome.php 删除,保留  www 目录下的  welcome.php 就会出错了。
这貌似是个 BUG,楼主已经提交 BUG 了,正等待官方回复。
 楼主| 发表于 2011-2-16 12:27:37 | 显示全部楼层
提供一个临时解决方案:
把system/core/Router.php的181行改成直接return;
正式解决方案等官方的更新吧
PHP复制代码
 
function _set_request($segments = array())
 {
                $segments = $this->_validate_request($segments);
 
                if (count($segments) == 0)
                {
                        //return $this->_set_default_controller();
                        return;//把上一行改成return;
                }
      ...........................
 
复制代码
发表于 2011-2-16 12:41:45 | 显示全部楼层
就是
controllers\welcome.php
controllers\www\welcome.php
两个文件必需同时存在,那么\www\里的才会被调用!
 楼主| 发表于 2011-2-16 12:50:49 | 显示全部楼层
不是同时存在的问题,调用的都是controllers\welcome.php
你把两个文件改一下输出就知道了

本版积分规则