wangqichun 发表于 2016-6-28 16:36:58

CodeIgniter 路由问题

我使用CI 3.0.6 版本,访问地址是http://myspringexample.com/pages/view/home.php
我本地修改了hosts文件,把myspringexample.com指向本地ip
并且项目中config/routes.php 没有对以上url进行路由配置
项目中写好了对应的controller以及方法
但是访问的时候走的还是默认的controller.
我跟踪了一下,发现是system/core/URI.php 文件中函数_parse_request_uri的问题,这个函数中如下代码的问题,我把它注释掉就可以了。这行代码作用是什么,这是不是bug
if (isset($_SERVER['SCRIPT_NAME'][0]))
{
   if (strpos($uri, $_SERVER['SCRIPT_NAME']) === 0)
   {
      $uri = (string) substr($uri, strlen($_SERVER['SCRIPT_NAME']));
   }
   elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0)
   {
      $uri = (string) substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME'])));
   }
}

Hex 发表于 2016-6-29 10:48:34

http://myspringexample.com/pages/view/home.php 这样的访问地址是错误的,在 CI 里不能直接访问 .php 文件。

梦想杀死 发表于 2016-6-28 17:03:27

你指向本地,base_url 咋配的
.htaccess 这个配了吗

wangqichun 发表于 2016-6-28 20:34:37

本帖最后由 wangqichun 于 2016-6-28 20:36 编辑

梦想杀死 发表于 2016-6-28 17:03
你指向本地,base_url 咋配的
.htaccess 这个配了吗
$config['base_url'] = 'http://myspringexample.com/';
.htaccess 配置如下:
<IfModule authz_core_module>
    Require all denied
</IfModule>
<IfModule !authz_core_module>
    Deny from all
</IfModule>

梦想杀死 发表于 2016-6-29 11:41:25

Hex 发表于 2016-6-29 10:48
http://myspringexample.com/pages/view/home.php 这样的访问地址是错误的,在 CI 里不能直接访问 .php 文 ...

这不是那谁么:o

wangqichun 发表于 2016-6-29 11:56:39

Hex 发表于 2016-6-29 10:48
http://myspringexample.com/pages/view/home.php 这样的访问地址是错误的,在 CI 里不能直接访问 .php 文 ...

那为什么,我修改框架里的代码就可以了,修改如下:
system/core/URI.php 文件中代码
if (isset($_SERVER['SCRIPT_NAME']))
{
   if (strpos($uri, $_SERVER['SCRIPT_NAME']) === 0)
   {
      $uri = (string) substr($uri, strlen($_SERVER['SCRIPT_NAME']));
   }
   elseif (strpos($uri, dirname($_SERVER['SCRIPT_NAME'])) === 0)
   {
      $uri = (string) substr($uri, strlen(dirname($_SERVER['SCRIPT_NAME'])));
   }
}
全部注释掉,就可以正常访问了,没有任何的问题。
我估计就是路由规则的问题,但是不知道是我哪里配置的问题,导致和框架里的代码冲突吧。

Hex 发表于 2016-6-29 14:05:32

梦想杀死 发表于 2016-6-29 11:41
这不是那谁么

那谁?

Hex 发表于 2016-6-29 14:06:29

wangqichun 发表于 2016-6-29 11:56
那为什么,我修改框架里的代码就可以了,修改如下:
system/core/URI.php 文件中代码
if (isset($_SERVER ...

你对 CI 的用法就是错误的,所以你需要修改 CI 源码才能实现你的需求。
正确的使用 CI 就不需要你去修改源代码了。
页: [1]
查看完整版本: CodeIgniter 路由问题