代码点火器,未找到 404 错误

Posted

技术标签:

【中文标题】代码点火器,未找到 404 错误【英文标题】:Code Igniter, Not Found 404 Error 【发布时间】:2015-02-20 07:36:48 【问题描述】:

我的网站有问题。升级到 mysql 5.6 后,主机 povider 重新编译了 Apache 和 php。显然他们还升级了 WHM cPanel。

目前我的网站可以正常显示,但是当尝试登录时,它找不到请求的特定页面。

错误信息:

在此服务器上找不到请求的 URL /main/cek_login。 此外,在尝试使用 ErrorDocument 处理请求时遇到 404 Not Found 错误。

来自 cPanel 的错误消息:

[2014 年 12 月 22 日星期一 10:10:58] [错误] 文件不存在:/home/xxx/public_html/main [2014 年 12 月 22 日星期一 10:10:56] [错误] 文件不存在:/home/xxx/public_html/404.shtml

到目前为止我的分析:

CI 版本:2.2 PHP 版本:5.4.3.5 mySQL 版本:5.6.21 cPanel 版本 11.46.1(内部版本 4)

main -> 实际上是一个名为 main.php 的文件 cek_login -> 是 main.php 中的一个函数,用于对用户表中的记录进行验证。

文件夹结构如下。

/home
   /application
       /controllers
           /main
       /view
          /login_view
   /system
   /assets
   /cgi-bin 

代码如下

<div class="loginForm">
  <?=($_GET[ 'error'])? "<div class='alert'>$_GET[error]</div>": ""?>
    <form class="form-horizontal" action="<?php echo base_url().'main/cek_login'; ?>" method="POST">

应用程序文件夹内的config.php $config['base_url'] = ''; $config['index_page'] = ''; $config['uri_protocol'] = 'REQUEST_URI'; -> 之前尝试过 AUTO,但没用。以前是自动

根文件夹中的.htaccess 重写引擎开启 RewriteCond %REQUEST_FILENAME !-f RewriteCond %REQUEST_FILENAME !-d RewriteRule ^(.*)$ index.php/$1 [L]

.htaccess 在另一个文件夹中 全部拒绝

routes.php $route['default_controller'] = "main"; $route['404_override'] = 'not_found';

我也尝试查看配置文件,并在发布之前尝试了很多技巧。

我怀疑是 base_url 函数或路由机制。我不确定。

我是 Code Igniter 或 PHP 的新人,也在服务器管理中。我的强项在于数据库。

请帮助缩小问题的根源。

最好的问候, 里德万

【问题讨论】:

查看other controllers are accessible,如果有请发base_url,htaccess和路线。 【参考方案1】:

请检查您的 config.php

$config['base_url']

然后检查'routes.php',在下面添加一行

$route['main/(:any)'] = 'main/index';

然后,在控制器文件中添加登录检查。

// Login check
    $exception_uris = array(
            'main/cek_login',
            'main/cek_logout'
    );
    if (in_array(uri_string(), $exception_uris) == FALSE) 
        if ($this->user_m->loggedin() == FALSE) 
            redirect('main/cek_login');
        
    

【讨论】:

已经解决了,原来.htaccess 文件被清空了!我不知道它是怎么发生的,它只是不知何故变成了空白。因此错误。在用我的本地设置检查之后,我知道这是罪魁祸首。感谢您的努力!【参考方案2】:

只需上传一个测试文件并检查您的服务器目录的文档根目录。

1.创建文件info.php 2.写代码

<?php
 phpinfo();

3.打开任意浏览器并输入http://www.yourdomain.com/info.php

    如果正常,在info.php页面列出的信息中找到文档roon

    如果 http://www.yourdomain.com/info.php 不起作用,请联系您的服务器支持团队进行修复。基本上是服务器配置问题,而不是 Codeigniter 文件。

【讨论】:

【参考方案3】:

发生该错误的原因有很多。这里有一些 1.确保你在controllers文件夹下有main.php,在main.php里面你应该有一个Main类,它像这样扩展CI_Controller

class Main extends CI_Controller

2.确保您的 .htaccess 正常工作。如果您的上一步正常,请尝试点击此链接

your_site_url/index.php/main/cek_login//make sure cek_login function exists inside the controller

如果此链接有效,您可能遇到 .htaccess 问题 3.您的 cpanel 错误表明您的 .htaccess 无法正常工作。 检查您的服务器是否有主 .htaccess,如果找不到文件,它将重定向您的站点。如果是这样,那么您的子 .htaccess 将不起作用。 我认为这是产生错误的主要原因。

【讨论】:

已经解决了,原来.htaccess 文件被清空了!我不知道它是怎么发生的,它只是不知何故变成了空白。因此错误。在用我的本地设置检查之后,我知道这是罪魁祸首。感谢您的努力!

以上是关于代码点火器,未找到 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

404 index() 函数代码点火器

NotFound:404 未找到(错误代码:10011):未知角色

Joomla 自定义组件未找到 404 错误

C#客户端用WebClient上传文件至IIS服务器,报错:远程服务器返回错误: (404) 未找到

当我尝试在服务器上上传我的项目时显示 404 not found 错误

Web 服务错误 HTTP 状态 404 - 未找到