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

[已解决] URI中的“.”被自动转换成“_”,为啥ni~~~~~

[复制链接]
发表于 2010-6-18 19:22:05 | 显示全部楼层 |阅读模式
关于 点 被自动转换成 下划线 的问题,

故事是这样的,
用CI 1.7.2 做了一套东西
需要通过URI来传递参数,其中用户名的参数是必然包含 “点”的,就是“.”,
例如:

http://mydomain.com/controller/method/aaa.bbb

原本工作的很好,但是前些日子把这套东西复制了一份到备份服务器上,环境差不多,但是却出了问题,
原本的 点 被自动转换成 下划线 ,
就是原本的aaa.bbb全都被CI自动转换成了aaa_bbb,
不论是通过method的参数来访问,还是通过$this->uri->rsegment(3)来访问,全都是aaa_bbb,

检查过了config里的permitted_uri_chars,“.” 也是允许的,
事实上,CI的config在两个服务器上几乎一样,但是就是在正式服务器上运行正常,在备份服务器上就不行

尝试过不使用CI,就直接写个php页面,访问$_GET['myparam']的话,aaa.bbb就是正常的aaa.bbb,而不会被转换,

总结起来就是:
在正式服务器上,无论使用CI还是直接访问php页面,都不会发生url转换,
在备份服务器上,直接访问php页面也没有url转换,
在备份服务器上,使用CI,就会发生url转换,

百思不得其解。。。。。。

服务器环境如下
正式服务器:
Windows Server 2008 Standard Edition Service Pack 2
Microsoft-IIS/7.0
PHP Version 5.3.1,FastCGI

备份服务器:
Windows XP Professional Service Pack 3
Microsoft-IIS/5.1
PHP Version 5.3.2,FastCGI和PHP Version 5.2.3都试过,一样的问题

求解惑~~~~~~~~

感激不尽~~~~~~~~
发表于 2010-6-18 21:41:40 | 显示全部楼层
-_- 竟然用 IIS,无语。。。
毫无疑问肯定是服务器环境造成的,因为你的 CI 是一模一样的,两个一样的代码,在不同服务器上表现不同,肯定是服务器问题。
我建议你用调试工具跟踪 CI 的运行来确定是什么造成了这个问题。
发表于 2010-6-18 23:58:45 | 显示全部楼层
找到URI.php
去掉
                        if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '')
                        {
                                $this->uri_string = key($_GET);
                                return;
                        }

这句就行,不影响程序
 楼主| 发表于 2010-7-14 00:23:55 | 显示全部楼层
-_- 竟然用 IIS,无语。。。
毫无疑问肯定是服务器环境造成的,因为你的 CI 是一模一样的,两个一样的代码 ...
Hex 发表于 2010-6-18 21:41



这个。。。。用IIS。。。。是历史遗留问题,刚进公司的时候没有PHP经验,以前玩ASP的,对IIS稍有了解,就架了IIS的server,
随着后来应用越来越多,也稍微用上了一些IIS特有的东西,换server的话,工程量不小,而且我自己对server没有直接控制权限,全都要通过IT来改,很麻烦。。。
我也想换apache很久了。。。。可是。。。。。人在江湖,身不由己啊。。。。。
 楼主| 发表于 2010-7-14 00:28:17 | 显示全部楼层
找到URI.php
去掉
                        if (is_array($_GET) && count($_GET) == 1 && trim(key($_GET), '/') != '')
                        {
                 ...
hangrila 发表于 2010-6-18 23:58



果然是问题所在,感谢这位大侠相助,

原来由于使用的IIS,不知道是IIS的那个设置,导致我必须通过 http://domain.com/index?/xxxx/aaa.bbb 的方式来访问页面
而那个?导致了 “/xxxx/aaa.bbb”这一部分成为了$_GET里的一个key,
而又是不知道啥原因,(猜想是key里不允许.的存在?),导致aaa.bbb变成了aaa_bbb
原因找到了,就放心了,
没敢改CI原始代码,就在自己的controller里加了一个转换,把_转换回.
幸好参数里有.的地方不多。。。。

晚了一个月才来道谢,惭愧,惭愧
发表于 2010-12-30 09:05:14 | 显示全部楼层
貌似就是不支持,我试了iis和apache都会自动把点变成下划线,是php的运行规则吧

本版积分规则