实时服务器显示404错误,但在本地Codeigniter 3上未显示

时间:2019-04-11 09:35:35

标签: php codeigniter

我有四个相同的页面,只是在某些标识符上有所不同,但是逻辑非常相似。它们都在localhost上运行。其中三个页面在实时服务器上可以正常运行,但是由于某些我无法理解的原因,其中一个返回了404。

我使用XAMPP 3.2.2和Sublime在本地开发它。我将其移至GoDaddy Deluxe Linux直播。我的Codeigniter版本是3.1.10。

我已经尝试过StackOverflow上大多数问题的答案:

  1. 所有控制器和型号名称的首字母均在文件名和文件内部大写。

  2. 此处的所有.htaccess代码:https://github.com/tasmanwebsolutions/htaccess_for_codeigniter

  3. 我有两个.htaccess文件,其中一个在应用程序文件夹中,一个在外部。我不知道这是否会使系统感到困惑?但是我在不同主机上的另一个网站具有相同的.htaccess文件,它们可以正常工作。而且无论如何,如果这使系统感到困惑,为什么它只影响四个相同页面之一?

.htaccess可以访问应用程序文件夹

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
</IfModule>

.htaccess进入应用程序文件夹:

<IfModule authz_core_module>
    Require all denied
</IfModule>
<IfModule !authz_core_module>
    Deny from all
</IfModule>

这四个文件的所有控制器都具有此顶部:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
//session_start(); //we need to call PHP's session object to access it through CI

class Question1 extends CI_Controller
{

,其余的是正常的代码,正在处理这四个文件中的三个。

在配置中。 php我有:

$config['uri_protocol'] = 'REQUEST_URI';

base_url很棒。

据我所见,模型和视图都还可以,并且网站的其余部分都可以通过随附的.htaccess正常运行。我的路线也可以。

我现在很迷茫。

PS。我有一个自定义的404页面。当我输入Assessment.com/index.php/question1时,它会显示该自定义404页面。但是,当我打开Assessment.com/question1时,它会显示codeigniter自己的404页面(出于某些原因,而不是我的自定义页面)。我认为这说明一切,我只是不知道什么。

编辑

这是我的routes.php:

$route['default_controller'] = 'home';
$route['404_override'] = 'Error404';
$route['translate_uri_dashes'] = TRUE;

我选择不做 $ route ['question1'] =“ Question1”; 因为它不会改变任何东西。

2 个答案:

答案 0 :(得分:1)

检查您的“应用程序环境”模式。您可以在您的项目root_folder / index.php上的行号中找到它。 57。

define('ENVIRONMENT', 'production');

将环境模式更改为开发模式,即

define('ENVIRONMENT', 'development');

然后再次刷新您的应用程序。如果您看到CodeIgniter默认错误,则可以了解您的CodeIgniter应用程序运行正常并检查错误。如果未显示任何错误,则说明您的.httaccess有任何错误。我用这段代码解决了我的404错误,您可以检查一下。

<IfModule mod_rewrite.c>
    RewriteEngine On

    RewriteCond %{REQUEST_URI} ^system.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    RewriteCond %{REQUEST_URI} ^application.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    RewriteCond %{REQUEST_URI} ^asset.*
    RewriteRule ^(.*)$ /index.php?/$1 [L]

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>

答案 1 :(得分:0)

为其他可能遇到相同问题的人提供答案。

好吧,因此用户不要慌张地建议我在有问题的控制器中仅回显“问题x”,当我这样做时,404错误消失了,并且回显了“问题x”。因此,肯定是问题出在我的控制器上,而不是我的例程或.htaccess文件。

现在,此控制器的设计方式是,它在显示任何内容之前先从数据库中调用一个ID。在回显“问题x”之后,我意识到它从数据库中调用的ID的值为零。因此,毫不奇怪,从控制器的角度来看,该页面不存在!因此就是404。

我现在通过从数据库更新该表并为ID赋予它首先应该具有的值来对其进行修复。