Codeigniter:常规控制器没问题。 HMVC控制器不起作用(找不到页面)

时间:2015-06-09 22:46:50

标签: php ajax codeigniter codeigniter-hmvc

所以这是一个令人烦恼的问题,在这个问题上,某些东西在你的本地项目中完美运行,但是一旦在生产中部署就会中断。

在这种情况下,我可以访问由常规codeigniter控制器生成的所有页面(位于应用程序/控制器中)。但是,一旦我尝试访问HMVC模块,我只会得到一个codeigniter 404错误。

普通控制器的情况仍然可以:

例如,如果我有一个位于application / controllers / C1.php中的常规控制器C1,它包含功能页面(),我可以毫无问题地访问www.mysite.com/C1/page。

访问HMVC控制器的问题:

但是,如果我想访问位于application / modules / C2 / controllers / C2.php中的控制器C2,通过网址www.mysite.com/C2/page,我将收到404错误。

通过ajax访问常规控制器的问题:

使用引用常规CI控制器的路径执行ajax调用时会出现第二个问题。似乎没有识别ajax调用中使用的路径,并且我收到500错误。但是,当直接在URL栏中调用相同的路径时,似乎执行了正确的函数。我之前通过应用Codeigniter base_url() not working properly for ajax中的解决方案解决了类似的问题。但是,我还没有确定这是否是同一个问题。

感觉就像装载机一样,但我不是专家!

即使它是装载机问题,为什么它会在本地工作而不是生产?

你有没有遇到过这样的事情?您对如何解决这个问题有所了解吗?

**编辑3:**我删除了之前的2个编辑,因为它们现在无关紧要。

激活调试模式并添加一些日志后,我终于找到了我认为的答案。

长话短说,我的本地codeigniter版本在Windows上运行,出于某种原因,当尝试访问控制器时,该案例被忽略。所以 F ile.php和 f ile.php被认为是相同的。

我的生产服务器运行linux,因此不考虑2个不同的文件名引用同一个文件。所以我要求 f ile.php,服务器回答“没有这样的文件”,因为我真正想要的文件是 F ile.php。

我需要上交。我会在运行更多支票后明天给出正确答案。

谢谢,

卢瓦克。

2 个答案:

答案 0 :(得分:2)

因此问题与常规控制器与HMVC控制器无关。基本上发生的是我的本地开发环境是Windows,并且出于某种原因,Windows决定在命名文件时这种情况无关紧要。

所以 f ile.php会被视为与 F ile.php同名(注意第一个是小写,第二个是大写)。

在我的代码中,我试图获得 f ile.php(小写),而实际文件名为 F ile.php,它在Windows上运行

然而,在文明操作系统 F ile.php和 f ile.php被认为是两个不同的名称,这就是为什么突然出现在生产中不起作用的原因,甚至虽然代码是一样的。无法找到控制器文件。

我更改了控制器文件的名称(用小写字母表示),现在情况正常。

感谢大家的建议。

卢瓦克。

答案 1 :(得分:0)

HMVC路线需要像

$route['something'] = "module/controller/function";

$route['something/(:any)'] = "module/controller/function/$1";

在使用welcome.php的控制器时,请确保这样,确保控制器文件名如Welcome.php

当使用路由时如果没有从控制器中删除index.php那么url将是

http://localhost/project/index.php/something

没有http://localhost/project/something