我有四个相同的页面,只是在某些标识符上有所不同,但是逻辑非常相似。它们都在localhost上运行。其中三个页面在实时服务器上可以正常运行,但是由于某些我无法理解的原因,其中一个返回了404。
我使用XAMPP 3.2.2和Sublime在本地开发它。我将其移至GoDaddy Deluxe Linux直播。我的Codeigniter版本是3.1.10。
我已经尝试过StackOverflow上大多数问题的答案:
所有控制器和型号名称的首字母均在文件名和文件内部大写。
此处的所有.htaccess代码:https://github.com/tasmanwebsolutions/htaccess_for_codeigniter
我有两个.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”; 因为它不会改变任何东西。
答案 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赋予它首先应该具有的值来对其进行修复。