Codeigniter :常规控制器就可以了。 HMVC 控制器不工作(找不到页面)

Codeigniter : Regular controllers are ok. HMVC controllers don't work (Page not found)

所以这是一种恼人的问题,有些东西在你的本地项目上运行得很好,但一旦部署到生产环境中,一切都会崩溃。

在这种情况下,我可以访问由常规 codeigniter 控制器(位于 application/controllers)生成的所有页面。但是,一旦我尝试访问 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访问常规控制器时出现问题:

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

感觉像是加载程序的问题,但我不是专家!

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

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

**编辑 3:**我删除了之前的 2 次编辑,因为它们现在不相关了。

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

长话短说,我的本地 codeigniter 版本在 windows 上运行,并且出于某种原因,当尝试访问控制器时,大小写被忽略。所以File.php和file.php被认为是一样的

然而我的生产服务器运行 linux,所以它不认为 2 个不同的文件名引用同一个文件。所以我要求 file.php,服务器回答 "there's no such file",因为我真正想要的文件是 File.php.

我需要上交。我会在明天 运行 再检查之后提出一个合适的答案。

谢谢,

Loïc.

使用 HMVC 路由需要类似

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

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

当使用控制器而不是 welcome.php 时也要确保这样确保控制器文件名像 Welcome.php

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

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

没有http://localhost/project/something

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

所以 file.php 将被视为与 File.php 同名(注意第一个是小写,第二个是大写)。

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

上有效

然而,在文明操作系统中File.php和file.php被认为是2个不同的名字,这就是为什么突然间有些东西在生产中不起作用,即使代码是一样的。只是找不到控制器文件。

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

感谢大家的建议。

Loïc.