【问题标题】:live server shows 404 error, but not on local, codeigniter 3实时服务器显示 404 错误,但不在本地,codeigniter 3
【发布时间】:2019-09-01 21:35:26
【问题描述】:

我有四个相同的页面,它们仅在某些标识符上有所不同,但逻辑非常相同。它们都在本地主机上工作。其中三个页面在实时服务器上运行良好,但其中一个返回 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 的情况下运行良好。我的路线也运行良好。

我现在很迷茫。

附言。我有一个自定义的 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'] = "问题1"; 在路线中,因为它不会改变任何东西。

【问题讨论】:

  • 你能写出你看不到的页面的 URL 是什么吗?你真的需要两个.htaccess-文件吗? ... 或者它可以合并在一个 htaccess 文件中吗? This here 是一种从 .htaccess 文件中写入内容的方法,这在调试时可能会有所帮助。如果是我,我会检查我的代码,并尝试写&lt;?php echo 'Does it reach this point'; die(); ?&gt;,看看代码中的问题出在哪里。
  • 我无法访问的 URL 是 assessment.com/question1 。我有一个assessment.com/question2assessment.com/question3,我可以毫无问题地访问它们。它们唯一的区别是变量名和几个值。我尝试结合两个 .htaccess 文件,它返回一个网站范围的错误。另外,我提供的 .htaccess 文件都是 if。逐行检查并不是很复杂。
  • 尝试将整个 .htaccess 添加到您的问题中(作为底部的添加),以便我(和其他人)可以看到您尝试过的内容。
  • 是否为$route['questionX'] = 'questionX/index'; 之类的所有 4 个 URI 显式添加路由?日志中有任何内容吗?尝试提高config.php 中的日志阈值。尝试删除所有代码并在每种方法中只执行echo "questionX";,也许问题出在代码中,而不是路由?我仍然怀疑您的Question1 类或文件或方法存在某些东西,它们在某种程度上有所不同。
  • 其实不是路线。我尝试添加 $route['questionX'] = 'questionX/index';在我的路线中并没有帮助。我在 Question1/index() 控制器中呼应了“questionx”,它出现了!所以,看起来是我的控制器有问题。根据您的意见,我现在正在修复它。

标签: php codeigniter


【解决方案1】:

检查您的应用环境模式。你可以在你的项目 root_folder/index.php 和第 1 行找到它。 57.

define('ENVIRONMENT', 'production');

将ENVIRONMENT模式改为开发模式,即

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>

【讨论】:

  • 我在第 56 行找到了这个:define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development');我假设我已经处于开发模式?我也试过你的 .htaccess 文件,还是报错。
【解决方案2】:

为可能遇到相同问题的其他人解答此问题。

好的,所以用户 Don't Panic 建议我在有问题的控制器中只回显“问题 x”,当我这样做时,404 错误消失了,它回显了“问题 x”。所以肯定是我的控制器有问题,而不是我的例程或 .htaccess 文件。

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

我现在已通过从我的数据库中更新该表并为 ID 赋予它原本应该具有的值来修复它。

【讨论】:

    猜你喜欢
    • 2016-05-10
    • 1970-01-01
    • 2016-03-09
    • 2017-06-30
    • 1970-01-01
    • 2018-01-22
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    相关资源
    最近更新 更多