CodeIgniter:在 Live Server 上找不到 404 页面

Posted

技术标签:

【中文标题】CodeIgniter:在 Live Server 上找不到 404 页面【英文标题】:CodeIgniter: 404 Page Not Found on Live Server 【发布时间】:2015-04-26 20:47:31 【问题描述】:

我一直在使用 CodeIgniter 开发一个小型 Web 应用程序。在本地测试后,我将它放在我的网络服务器上,让其他几个人测试一些功能。导航到我得到的网站时:-

404 Page Not Found 错误页面

在我的本地机器上查看它时,一切都加载并完美运行。

这是我上传到public_html目录的:

application directory
system directory
assets directory (my assets for the site)
index.php

所有这些都在public_html 目录中。就像我说的,它确实给了我 CodeIgniters 404 错误页面,所以我知道它至少看到了 CodeIgniter。我还尝试将config.php 中的$config['base_url'] 更改为我的URL。更改它或将其留空时出现同样的错误。 我检查了我的路线,所有这些似乎都是正确的。在我的本地机器上导航到它时,一切都加载得很好。

我现在也没有使用.htaccess 文件

对我应该尝试什么有什么建议吗? 非常感谢!

【问题讨论】:

你可以从这个链接***.com/questions/9315316/…和***.com/questions/17630669/…找到你的答案 【参考方案1】:

您正在使用带有 OOPS 概念的 MVC。所以有一些特定的规则。

1) 你的类名(即:控制器名)应该以大写字母开头。

例如:您的控制器名称是“冰淇淋”。那应该是'cecream'

在 localhost 中它可能不是强制性的,但在服务器中它会检查所有这些规则,否则它无法检测到正确的类名。

【讨论】:

请注意:类名文件名都需要大写(以大写字母开头)。所以如果类名是'Icecream',文件名需要是'Icecream.php',否则CodeIgniter会抛出404错误。 我不认为在服务器上它会检查所有这些规则。这可能是由于服务器运行 Linux 对文件名区分大小写的一个简单事实...... 这种情况,也必须验证服务器上的控制器文件,因为有时即使你用标题大小写的文件也无法正确替换,更好的方法是先删除服务器上的控制器&使用正确的文件名上传文件。 OMG 刚刚拯救了我的一天 发生在我身上。我使用 MacOS 进行开发,默认情况下它具有不区分大小写的文件系统,但生产服务器在 Linux 上。被头抓了将近一天。【参考方案2】:

将文件名和类名的第一个字母改为大写即可。

文件: controllers/Login.php

班级: class Login extends CI_Controller ...

文件名,作为类名,应该以大写字母开头。此规则也适用于模型。

https://www.codeigniter.com/user_guide/general/models.html

【讨论】:

【参考方案3】:

我遇到了同样的问题。将控制器的首字母更改为大写会有所帮助。

【讨论】:

【参考方案4】:

您可以在此处查看许多内容。我会和你一起回顾每一个。

1, 从 localhost(htdocs) 迁移到实时服务器时,您需要确保支持您使用的 PHP 版本。

要对此进行测试: 创建一个 'index.php' 文件并仅添加以下行。

<?php phpinfo(); ?>

只需按“Ctrl + F”并搜索“版本”。您将找到 php 版本。它可能需要 5.3+ 才能支持功能。

2, 检查您的 config/config.php 并检查您的 $config['base_url']$config['index_page'] 下面的屏幕截图

我建议将站点名称放在基本 url 示例中:'www.site.com/' 但删除 index.php 进行清理。

3, 最可能的原因是从这个开始

很可能是 .htaccess 文件。这是我的 Elliot Haughton 制造的。 将它放在你的根目录中,如有必要,更改第 9 行“RewriteBase /”。

<IfModule mod_rewrite.c>
RewriteEngine On
# !IMPORTANT! Set your RewriteBase here and don't forget trailing and leading
# slashes.
# If your page resides at
# http://www.example.com/mypage/test1
# then use
# RewriteBase /mypage/test1/
RewriteBase /
RewriteCond %REQUEST_FILENAME !-f
RewriteCond %REQUEST_FILENAME !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

<IfModule !mod_rewrite.c>
# If we don't have mod_rewrite installed, all 404's
# can be sent to index.php, and everything works as normal.
# Submitted by: ElliotHaughin 
ErrorDocument 404 /index.php

(确保你使用上面的两个部分。编辑器将它分成两部分,但上面的所有代码都是一个 .htaccess 文件)。

如果上述方法都不起作用,请回我一声,我们会逐步解决。

【讨论】:

感谢您提供帮助。我已经尝试了所有这些建议,但我仍然遇到错误。我尝试将 base_url 为空,也尝试将其设置为我的 URL。 另外,当我设置 .htaccess 文件时,我不再看到 CodeIgniters 错误页面,而是变成了内部服务器错误。我已经尝试了所有我能想到的重写基础。如果有帮助,该站点将作为我拥有的另一个站点的子域上传。我还上传了另一个 CodeIgniter 应用程序作为我在几个月前创建的子域,它上传完美并且效果很好。虽然当我以完全相同的方式上传这个时,我得到了我一直在描述的错误......【参考方案5】:

我已经解决了这个问题,请稍作修改

1- 所有控制器类名都应以大写字母开头。我的意思是类的第一个字母应该是大写的。例如,我们有一个类名为 Pages 的控制器

所以应该是页面而不是页面

2- 将控制器类 Pages 保存为 Pages.php 而不是 pages.php

所以第一个字母必须大写

model 也是一样,model class 的首字母应该是大写的,并且 model class 保存为 Pages_model.php 而不是 page_model.php

希望这能解决你的问题

【讨论】:

在重命名所有类文件(包括模型和库文件)后,即只有大写的首字母,它开始工作。非常感谢。【参考方案6】:

我被困住了大约一天,我只是用大写字母重命名文件名“文件名”,并将控制器类重命名为“类名”。它解决了这个问题。

**class Myclass extends CI_Controller
save file: Myclass.php**

应用程序/config/config.php

$config['base_url'] = '';

【讨论】:

【参考方案7】:

解决了这个问题。更改您的班级名称以使 only 第一个字母大写。因此,如果您有类似“MyClass”的内容,请将其更改为“Myclass”。将其应用于文件名和类名。

【讨论】:

我的产品服务器是 ubuntu,这解决了我的问题。【参考方案8】:

我在本地和生产服务器上这样做:


路线:

$route['default_controller']   = 'Home_controller';

文件名:

controllers 文件夹中:Home_controller.phpmodels 文件夹中:Home_model.phpviews 文件夹中:Home.php

Home_controller.php:

       class Home_controller extends CI_Controller 

           public function index()

              //loading Home_model
              $this->load->model('Home_model');

              //get data from DB
              $data['db_data']  = $this->Home_model->getData();

              //pass $data to Home.html
              $this->load->view('Home', $data);
           
       

Home_model.php:

       class Home_model extends CI_Model 
       ...
       

案例应该不会再有问题了:)

【讨论】:

【参考方案9】:

php启动后尝试在根文件夹index.php中添加以下行:

ob_start();

这对我有用。

【讨论】:

【参考方案10】:

请检查root/application/core/文件夹文件是否使用过MY_Loader.phpMY_Parser.phpMY_Router.php文件。

如果是这样,请尝试从文件夹中删除上述文件并检查是否有任何不同。事实上,只需保留默认的 index.html 文件即可清理该文件夹。

我发现这些文件导致问题路由到正确的控制器功能。

希望有帮助!

【讨论】:

【参考方案11】:

我能够通过更改来修复类似的错误

http://ip-address/html/ci3-fire-starter/htdocs/index.php/

在 application/config/config.php 第 26 行。

【讨论】:

以上是关于CodeIgniter:在 Live Server 上找不到 404 页面的主要内容,如果未能解决你的问题,请参考以下文章

codeigniter not work at live page not found 错误在服务器上

live-server

live-server 快速搭建服务

live-server的使用

live-server开启临时服务

live-server使用笔记