0

所以这是一个烦人的问题,有些东西在你的本地项目上运行良好,但是一旦部署到生产环境中,一切都会中断。

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

常规控制器的情况仍然可以:

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

访问 HMVC 控制器的问题:

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

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

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

感觉像是装载机问题,但我不是专家!

即使是加载程序问题,为什么它会在本地而不是在生产环境中工作?

你有没有遇到过这样的事情?你知道如何解决这个问题吗?

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

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

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

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

我需要上交。我会在进行更多检查后,明天提出一个正确的答案。

谢谢,

洛伊克。

4

2 回答 2

2

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

因此,file.php将被视为与 File.php 相同的名称注意第一个是小写,第二个是大写)。

在我的代码中,我试图获取file.php(小写),而实际文件名为File.php并且它在 Windows 上有效。

但是,在文明的操作系统中,File.phpfile.php被认为是 2 个不同的名称,这就是为什么在生产环境中突然出现问题的原因,即使代码相同。只是找不到控制器文件。

我更改了我的控制器文件的名称(将它们放在小写中),现在一切正常。

谢谢大家的建议。

洛伊克。

于 2015-06-14T12:53:04.793 回答
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

于 2015-06-09T23:23:19.760 回答