2011-05-04 111 views
1

基本上一个控制器(controller/topics.php,http://192.168.1.50/topics)通过CI的index.php像它的假设那样通过,另一个控制器(controller/user.php, http://192.168.1.50/user)由于一些奇怪的原因根本没有通过(我在浏览器中得到一个404错误)。 CodeIgniter和/或Apache2正在做一些奇怪的事情,我无法弄清楚:'.../user'给了我Apache的404页面,但'.../User'给了我CI的404页面,这意味着CI抓取URI大写控制器名称,并忽略一些一些具有小写控制器名称的URI(然后Apache尝试处理该URI)。在Codeigniter中,一些URIs通过index.php,一些不通过

任何想法为什么以及如何解决?

P.S. - 是的,我确实在CI的论坛上发布了我的问题,但我没有在他们的帮助下运气。我在Linux发行版上运行CodeIgniter 2.0.2(带有LAMP的Ubuntu 10.10)。

+0

奇怪的是'.../index.php/user'加载成功。因此,所有控制器(评论,家庭,主题,用户,欢迎)与丑陋的索引。PHP /'加载成功(除了指向图像的链接,CSS,js的东西现在打破了),但没有丑陋的'index.php /'只有一些控制器加载成功(家,主题,欢迎)。 FRAK! – crashintoty 2011-05-04 19:06:18

+0

发布你的.htaccess文件内容(隐藏任何重要的东西),你的route.config怎么样? – Jakub 2011-05-04 19:55:45

+0

http://pastebin.com/T7VjM6ba - 包含相关文件的相关片段(包括.htaccess和路由配置) – crashintoty 2011-05-04 22:29:49

回答

1

问题是重写条件语法是说不要路由那些BEGIN与i,c,j或u而不是名称为i i,c,j或u的文件夹的文件夹。巧合的是我没有加载的控制器名称从i(idea)和u(user)开始。

我可以将我的静态文件夹重命名为全名(“上传”而不是“u”)并更新重写条件并解决此问题,但我想保留相同的名称。任何人都知道重写条件的正确语法来匹配确切的名称(而不是像或开始)?

+0

请不要用另一个问题回答问题:) – Alexander 2013-03-01 19:16:56

0

检查控制器的名字,最常见的事的人(我发现)做的是文件名复制自己的“主”控制器(说topics.php),并更名为whatever.php

他们开始研究和控制器名称保持“主题”。 404被抛出由于没有被发现的控制器(未实际文件)

例如: class Blog extends CI_Controller {...

如果上面的代码是在一个文件名为stuff.php。你会得到一个404如果你打电话/stuff

+0

是的,控制器名称与文件名匹配(当然,文件名只是小写)。 – crashintoty 2011-05-04 18:58:06

0

昨天我遇到了类似的问题。默认的控制器可以有一个大写的文件名,但是任何其他控制器在大写时会产生一个404。这是在一个MAMP设置。

确保您的控制器也反映文件名。

class User extends CI_Controller { 
+0

这实际上是不正确的,你的控制器必须是首字母大写! http://codeigniter.com/user_guide/general/controllers.html – Jakub 2011-05-04 18:35:32

+0

你是对的。我指的是文件名,并没有大写实际的声明。接得好。谢谢。 – mhiggins 2011-05-04 18:42:48

+0

是的,我的控制器也是大写的。 – crashintoty 2011-05-04 18:56:54

0

在你的htaccess ...而不是

RewriteRule ^(.*)$ /index.php/$1 [L]

尝试

RewriteRule ^(.*)$ index.php/$1 [L]

,并在您的CI配置设置base_url的指示(包括尾部/!)

$config['base_url'] = 'http://www.site.com/';

应该这样做。

+0

不,不要运气:/ – crashintoty 2011-05-06 01:00:05