CodeIgniter始终且仅显示默认控制器或404页面

envsm3lx  于 2022-12-06  发布在  其他
关注(0)|答案(3)|浏览(170)

我被要求学习CodeIgniter,但我之前甚至没有听说过它,所以我试图通过教科书和官方教程。但我甚至不能成功地显示一个健康的世界...我试图寻找一段时间的解决方案,但没有任何帮助。
具体问题是这样的。我正在用MAMP构建CodeIgniter环境,PHP版本是5.6.2,CodeIgniter版本是2.2.0。但是无论我做什么,站点都只能显示默认的控制器或404页面。
首先,这里是控制器文件夹中的“hello.php”:

<?php
class Blog extends CI_Controller {

    public function index()
    {
        echo 'Hello World!';
    }
}
?>

我还没有设置mod_rewrite,所以我只是转到这个地址:php/您好,请输入您的密码。
我只得到一个404页面,所以我尝试修改config.php中的uri_protocol,我尝试了所有的修改,QUERY_STRING和ORIG_PATH_INFO一开始工作得很好。我以为我成功了。但是我错了。我然后用.htaccess文件设置了一个mod_rewrite,我只能得到一个默认的控制器(这是欢迎页面).我想我一定是在我的.htaccess文件做错了什么,所以我试图编辑它,但它不工作,所以我试图删除该文件,并回到index.php/hello再次,然后我发现它不能再工作了,我得到只是一个默认的欢迎页面。
然后我尝试重新启动服务器,将config.php中的index_page修改为'index.php?',将CodeIgniter移到根目录(我的意思是不是localhost:8888/CodeIgniter/index.php,我删除了CodeIgniter文件夹,只是转到localhost:8888/index.php),完全删除当前的CodeIgniter文件夹并从官方网站再次下载,当然也尝试了uri_protocol的其他选择。但是没有任何帮助。我得到的仍然是默认控制器或一个404页面。
总之,在config.php文件中,如果我设置

$config['index_page'] = 'index.php';

然后

$config['uri_protocol'] = 'QUERY_STRING';
$config['uri_protocol'] = 'ORIG_PATH_INFO';

返回默认的控制器(即使我试图访问实际上不存在于控制器文件夹中的页面),而其他uri_protocols返回404页面。
否则,如果我设置

$config['index_page'] = 'index.php?';

然后

$config['uri_protocol'] = 'PATH_INFO';
$config['uri_protocol'] = 'ORIG_PATH_INFO';

返回默认控制器(即使我尝试访问控制器文件夹中不存在的页面也是如此),其他则返回404页面。
我也认为这可能是MAMP的问题,但即使我上传整个网站到VPS服务器(CentOS 6.5,php版本5.3.3),完全相同的问题发生。
有人知道吗?

3phpmpom

3phpmpom1#

首先,要从url中删除index.php,请在站点根目录中创建一个.htaccess文件,并添加以下代码:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php/$0 [PT,L]

然后在您的config/config.php文件中:

$config['base_url'] = '';
$config['index_page'] = '';

照常设置其余配置参数。
现在,你正在使用url localhost:8888/CodeIgniter/index.php/hello来访问你的应用程序。这是错误的(除非你正在路由url)。你必须加载你的控制器,控制器会为你加载视图。所以,现在用途:

localhost:8888/CodeIgniter/blog

在控制器的构造函数中,你必须调用父构造函数,这样你就可以使用loader class来加载库,视图,模型等等。
现在最后,你最好的办法是好好地浏览文档。你已经试过了,但还不够!祝你好运。

ohtdti5x

ohtdti5x2#

嗯,谢谢你的帮助!Twitter上的一个朋友告诉我,类名是错误的,它应该是相同的php文件(在这种情况下,它应该是类Hello extends CI_Controller)
在那之后,一切都好了!

3zwjbxry

3zwjbxry3#

我在通过命令行使用CodeIgniter 1.7时遇到了这个问题(CLI)。我必须修改_fetch_uri_字符串CI_URI类中的()函数(system/libraries/URI.php)来查看$_SERVER['argv'][1]是否被设置为查找正在使用的URI。我只会在index.php文件的顶部执行一个var_dump($_SERVER); exit();
我对_fetch_uri_string()函数所做的更改突出显示:

相关问题