CodeIgniter 404找不到页面,但为什么?

Jos*_*eph 19 php routes codeigniter http-status-code-404

我正在为两个应用程序(公共和管理应用程序)使用CodeIgniter.文档结构的重要元素是:

/admin
/admin/.htaccess
/admin/index.html
/application
/application/admin
/application/public
/system
.htaccess
index.php
Run Code Online (Sandbox Code Playgroud)

/admin/.htaccess文件如下所示:

DirectoryIndex index.php
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./index.php/$1 [L,QSA]
Run Code Online (Sandbox Code Playgroud)

/admin/index.php有以下更改:

$system_folder = "../system";
$application_folder = "../application/admin"; (this line exists of course twice)
Run Code Online (Sandbox Code Playgroud)

/application/admin/config/routes.php包含以下内容:

$route['default_controller'] = "welcome";
$route['admin'] = 'welcome';
Run Code Online (Sandbox Code Playgroud)

欢迎是我的默认控制器.

当我调用域/管理员时,我收到404 Page Not Found错误.当我调用Domain/admin/welcome时,一切正常.在调试日志中,我收到以下错误消息:

DEBUG - 2010-09-20 16:27:34 --> Config Class Initialized
DEBUG - 2010-09-20 16:27:34 --> Hooks Class Initialized
DEBUG - 2010-09-20 16:27:34 --> URI Class Initialized
ERROR - 2010-09-20 16:27:34 --> 404 Page Not Found --> admin
Run Code Online (Sandbox Code Playgroud)

奇怪的是,这个设置完全适用于我的本地MAMP安装(使用localdomain/admin /),但是当我在"实时"服务器上发布并测试它时,我只得到404错误.

有任何想法吗?我究竟做错了什么?谢谢C.

Jos*_*eph 15

问题的原因是服务器使用FastCGI运行PHP.

将config.php更改为

$config['uri_protocol'] = "REQUEST_URI";
Run Code Online (Sandbox Code Playgroud)

一切顺利.


小智 7

将此答案留给了遇到我情况的其他人.

我的codeigniter应用程序在localhost/WAMP中工作正常,但在推送到AWS EC2实例时无法路由并生成404未找到的错误.我的问题是通过HERE htaccess在localhost中的解决方案解决的,但在EC2实例中不起作用

(路由到我的管理页面){domain}/admin正在生成404

/etc/httpd/conf/httpd.conf文件需要修改.

- 在"DocumentRoot"/ var/www/html""(2个地方)的每个实例之后,需要将"AllowOverride None"更改为"AllowOverride All".

从AWS仪表板重新启动EC2实例.

{domain}/admin现在可以访问并按预期工作.

希望这有助于其他人喜欢它帮助我!


小智 7

您可以尝试两种方法中的一种或两种方式的组合.

  1. 确保控制器的名称以大写字母开头.例如"Mycontroller.php"
  2. 如果您没有对路线进行任何更改,由于某些奇怪的原因,您可能必须在您的网址中包含大写字母.例如,如果您的控制器是"Mycontroller.php",其中包含一个名为"testfunc"的函数,那么您的网址将如下所示:" http://www.yourdomain/index.php/Mycontroller/testfunc ".注意大写字母.(我假设您没有添加htaccess文件来删除'index.php'部分.如果有,请将其从网址中删除.)

我希望这可以帮助别人

  • 控制器确实需要大写,但是通过URL访问它不一定要求您在URL中输入大写字母。 (2认同)

小智 7

  1. 将您的控制器名称第一个字母更改为大写。
  2. 更改与您的控制器名称相同的网址。

例如:

您的控制器名称是 YourController

您的网址必须是:

http://example.com/index.php/YourController/method

不是:

http://example.com/index.php/yourcontroller/method