所以这是一个令人烦恼的问题,在这个问题上,某些东西在你的本地项目中完美运行,但是一旦在生产中部署就会中断。
在这种情况下,我可以访问由常规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。
我需要上交。我会在运行更多支票后明天给出正确答案。
谢谢,
卢瓦克。
答案 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将是