1

我是 CI 新手。一直以来,我一直在本地主机上做我最近的项目。我选择 CodeIgniter 和 Doctrine 作为我的数据库框架。

我的本地主机规格是:

Windows 7 Wampserver 2.0

我的 apache 中也启用了 rewrite_module。

从一开始,我的本地主机上的 CI 和 Doctrine 就一切正常。我设法完成了我的项目,并且很高兴地等待移植我的第一个项目并将其上传到我的 bluehost 帐户的子目录中。

在传输文件之前,我通过填写所需的值更改了 config.php 和 database.php。

但是在我将文件(连同 .htaccess)上传到我的托管解决方案提供商之后,我只能看到 404 错误(这是来自 codeigniter 类,而不是我的托管解决方案页面)。我不断得到这个。我尝试了多种选择,但我无法弄清楚这是怎么回事。我确信 index.php 被调用了,当它尝试路由到默认控制器(在我的例子中是“home”)时,由于某种原因它失败了。

我的本地主机中的目录结构

PathtoWamp->www->mysite 文件夹

我的实时站点中的目录结构

public_html(这是我的根文件夹)->mysitefolder

我还可以看到我的实时服务器已启用 rewrite_module(这就是我的托管解决方案 bluehost 所说的,我猜这是真的)

由于我已经过了最后期限,我想知道一个解决方案。如果你们有任何想法,请告诉我。

提前致谢。

问候,阿肖克·斯里尼瓦桑。

4

2 回答 2

1

我找到了问题的根源。一直以来,它都不是.htaccess,不是httpd.conf,也不是bluehost,不是上帝也不是任何人,但真正的罪魁祸首是Mr.CodeIgniter。

如果您查看位于 system/libraries 中的 Router.php,那么您会在 88 号找到一行

$this->default_controller = ( ! isset($this->routes['default_controller']) OR $this->routes['default_controller'] == '') ? FALSE : strtolower($this->routes['default_controller']);

如果您在三元组末尾注意到他们正在对控制器名称强制执行 strtolower 操作。我删除了该方法,并通过将行更改为此来简单地使用原始名称。

$this->default_controller = ( ! isset($this->routes['default_controller']) OR $this->routes['default_controller'] == '') ? FALSE : $this->routes['default_controller'];

好的,但这里有什么大不了的?是的,这现在很有意义。我的本地服务器安装在 Windows 上,而我的生产服务器托管在 Unix 机器上。因为众所周知,Windows 是一个不太在意区分大小写的软包,但 Unix 恰恰相反。

我项目中的控制器名称都是大写模式,真正的问题来自这里。我还访问了位于应用程序/配置中的 routes.php,在那里我纠正了这个观点的问题。

最后,我现在可以托管我的网站了。感谢所有在阅读我的问题后投入其中的人。

问候,

阿肖克·斯里尼瓦桑。

于 2011-05-18T11:07:16.850 回答
0

我在您的 httpd.conf 中遇到了同样的问题

你需要找到这样的一行

<Directory />
    Options Indexes FollowSymLinks
    AllowOverride None
</Directory>

将其更改为

<Directory />
    Options Indexes FollowSymLinks
    AllowOverride All
</Directory>

这就是我所需要的一切

于 2011-05-18T04:27:30.733 回答