2010-09-20 103 views
17

我为两个应用程序(公共和管理应用程序)使用CodeIgniter。 文档结构的重要内容是:未找到CodeIgniter 404页面,但是为什么?

/admin 
/admin/.htaccess 
/admin/index.html 
/application 
/application/admin 
/application/public 
/system 
.htaccess 
index.php 

的/admin/.htaccess文件看起来是这样的:

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

的/admin/index.php有以下变化:

$system_folder = "../system"; 
$application_folder = "../application/admin"; (this line exists of course twice) 

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

$route['default_controller'] = "welcome"; 
$route['admin'] = 'welcome'; 

欢迎使用我的默认控制器。

当我调用域/管理员时,出现404页未找到错误。当我打电话给域/管理员/欢迎一切正常。在调试日志我收到以下错误信息:

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 

古怪足够此设置完美的作品在我的本地MAMP安装(与LOCALDOMAIN /管理/),但是当我发布和测试它的“活”服务器,我只是得到404错误。

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

+0

只是一个想法,也许是活的服务器不运行mod_rewrite?现场服务器只给你404或偶尔的服务器? – Fanis 2010-09-20 16:31:31

+0

它似乎正在工作 - 我只是测试它与捕获所有非www域和重定向到google.com。 404错误肯定是由CI生成的(因为他们使用CSS)。 – Joseph 2010-09-21 05:29:56

+0

只是想发布,如果你正在运行一个全新的Codeigniter 3安装,并且你的主机文件夹的名称中有一个空格,它将提供一个404.版本3.0.0 – 2015-06-10 19:32:49

回答

15

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

改变config.php文件到

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

一切后工作。

+0

路由开始工作,但现在CLI返回'Welcome to CodeIgniter'屏幕。反正它呢?我已经发布了更多信息[这里](http://stackoverflow.com/questions/25545696/codeigniter-htaccess-rewriterule-result-in-404-page-not-found#comment39888065_25545696) – Kuf 2014-08-28 11:24:40

1

你的文件夹/文件结构对我来说似乎有点奇怪。我无法弄清楚你是如何布置的。

你好,我使用CodeIgniter的两个应用程序(公共和管理员应用程序)。

这对我来说听起来像你有两个独立的CI安装。如果是这种情况,我会推荐它。为什么不在管理员控制器中处理所有管理员的东西?如果您确实需要两个独立的CI安装,请确保它们绝对是独立的实体,并且两者不会相互冲突。这条线:

$system_folder = "../system"; 
$application_folder = "../application/admin"; (this line exists of course twice) 

那地方你说的这个存在(/admin/index.php...or您的意思是否/管理/应用/配置?)有我抓我的头。您的管理员/应用程序/管理员和顶层的系统文件夹?

+0

这实际上是我如何构建我的应用程序。我有一个管理应用程序和一个网络应用程序。他们都共享一个系统文件夹('../system'),每个文件夹都有一个单独的应用程序文件夹('../application/admin'),('../application/website')。 – Matthew 2010-09-20 17:14:51

+0

它基于此:http://codeigniter.com/user_guide/general/managing_apps.html只有一个系统文件夹。我将应用程序文件夹移至与系统文件夹相同的级别。 – Joseph 2010-09-21 05:19:50

+0

我的意思是在/admin/index.php文件中,我改变了第26,43和101行。 – Joseph 2010-09-21 05:21:53

1

我们已经在服务器端

$this->class = strtolower(__CLASS__); 
0

给控制器名称在较低的情况下,在我来说,我用它localhost忘在.htaccess改变RewriteBase

-2

检查你的目录中找到的任何空间 Codignater多次给错误时您空间,在你的目录Codignater 删除所有空间从目录 例

ITWORLD compk 

改变它

ITWORLD_COM_PK 
4

离开对于遇到我的情况的其他人来说,这个答案。

我的codeigniter应用在localhost/WAMP中工作正常,但在推送到AWS EC2实例时无法路由并产生404未找到的错误。我的问题是从解决答案从HEREhtaccess works in localhost but doesn't work in EC2 instance

(路线我的管理页面) {}域/管理员正在生产404

/etc/httpd/conf/httpd.conf文件需要进行修改。

-每个“DocumentRoot”/ var/www/html“”(2位)“AllowOverride None”实例需要更改为“AllowOverride All”后。

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

{域}/admin现在可以按预期方式访问和工作。

希望这可以帮助像其他人一样帮助我!

+0

谢谢,它为我工作 – 2017-09-19 15:11:45

3

你可以尝试两种东西之一或两者的组合。

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

我希望这可以帮助别人

+0

Controller确实需要大写,但通过URL访问它并不一定要求您将大写字母放在URL中。 – PhoenixNoor 2017-12-12 18:33:18

0

我有同样的问题迁移到后新的环境,它只是简单的服务器没有运行mod_rewrite

快速sudo a2enmod rewrite 然后sudo systemctl restart apache2

和问题就解决了......

感谢@fanis谁指出这一点在他对这个问题发表评论。