让codeigniter在Linux主机运行时忽略url大小写
codeigniter框架(CI框架)的web应用在Linux主机里运行,会发现其对url的大小写很敏感。尤其是针对控制器的路由上。其实其他的一些web应用程序及框架可能也有这样的问题。
基本原因是CI框架在路由的时候,其实是通过地址判断文件是否存在,从而决定加载。同时Linux系统对文件名有大小写区分。
于是在地址栏里输入http://yoursite.com/Hello/hell的时候,打开的是一个名叫Hello的控制器,而同时加载的是controller下的Hello.php这个文件,如果你的文件名是hello.php,那么肯定就有404的错误。同样的如果你的控制器文件名字是hello.php,而你的地址是http://yoursite.com/Hello/hell,其要寻找的控制器文件Hello.php的时候自然就会判定不存在。
解决方法很简单,就是在system/libraries里的Router文件里加一条强制将控制器转化为小写的语句。然后将所有的控制器文件名改为小写(注意是文件名,不是类的名字)。
因为是修改框架本身的源文件,所以请备份好原文件。
1. 具体如下,找到system/libraries里的Router文件,修改源文件:
//找到 function _validate_request
function _validate_request($segments)
{
//增加下面这一句,其实就是强制将控制器名字转化为小写
$segments[0] = strtolower($segments[0]);
// Does the requested controller exist in the root folder?
if (file_exists(APPPATH.'controllers/'.$segments[0].EXT))
{
return $segments;
}
2. 将controllers文件夹下的文件都用小写的文件名,这也是codeigniter推荐的命名方式。
其实很多时候codeigniter并不推荐修改源文件,但是个人觉得这个方法最直接最有效,若有其他的方法,请留言告知,谢谢。













































![Falling for you.. [Front Page] Falling for you.. [Front Page]](http://farm2.static.flickr.com/1221/4600933433_c531f86070.jpg)













