CodeIgniter:在实时服务器上找不到 404 页面

问题描述 投票:0回答:10

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

404 找不到页面错误页面

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

这是我上传到

public_html
目录的:

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

所有这些都在

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

我此时也没有使用

.htaccess
文件

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

php codeigniter
10个回答
101
投票

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

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

例如:您的控制器名称是“icecream”。那应该是“Icecream”

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


18
投票

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

文件:

controllers/Login.php

班级:

class Login extends CI_Controller { ... }

文件名与类名一样,应以大写字母开头。这个规则也适用于模型。

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


17
投票

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

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

要测试这一点: 创建一个“index.php”文件并仅添加以下行。

<?php phpinfo(); ?>

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

2, 检查您的

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

enter image description here

我建议将网站名称放在基本网址示例中:'

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>

<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
</IfModule>

如果以上方法都不起作用,请给我留言,我们将逐步解决它。


14
投票

我也有同样的问题。将控制器的第一个字母更改为大写有帮助。


12
投票

我已经解决了这个问题,请做一些更改

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

所以应该是Pages而不是pages

2- 将控制器类 Pages 保存为

Pages.php
而不是
pages.php

所以第一个字母必须大写

与模型相同,模型类首字母应大写,并将模型类保存为

Pages_model.php
而不是
page_model.php

希望这能解决你的问题


5
投票

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

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

应用程序/config/config.php

$config['base_url'] = '';

3
投票

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


路线:

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

文件名称:

  • controllers文件夹中:Home_controller.php
  • models文件夹中:Home_model.php
  • views文件夹中: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 {
       ...
       }

案件应该不再有问题了:)


1
投票

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

ob_start();

这对我有用。


0
投票

请检查

root/application/core/
文件夹中的文件是否使用过
MY_Loader.php
MY_Parser.php
MY_Router.php
文件。

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

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

希望有帮助!


0
投票

在根文件夹index.php中添加以下行,就在之后

ob_start();

© www.soinside.com 2019 - 2024. All rights reserved.