在Codeigniter中,一些URI通过index.php,有些则没有

时间:2011-05-04 18:27:52

标签: codeigniter controller uri codeigniter-url

基本上一个控制器(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)。

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

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

4 个答案:

答案 0 :(得分:1)

问题是重写条件语法是说不要使用i,c,j或u来路由BEGIN的文件夹而不是名称为IS i,c,j或u的文件夹。巧妙地,我的控制器名称没有加载开始于i(想法)和你(用户)。

我可以将我的静态文件夹重命名为全名(“uploads”而不是“u”)并更新重写条件并解决此问题,但我希望保持名称相同。任何人都碰巧知道重写条件的正确语法,以匹配确切的名称(而不是喜欢或开头)?

答案 1 :(得分:0)

检查你的控制器名称,人们(我发现)做的最常见的事情是复制他们的'主'控制器(比如topics.php)并将文件名重命名为whatever.php

他们开始开发,控制器名称保持'主题'。由于找不到控制器(不是实际文件)而抛出404

例如: class Blog extends CI_Controller {...

如果上面的代码在一个名为stuff.php的文件中。如果您致电/stuff

,您将获得404

答案 2 :(得分:0)

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

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

class User extends CI_Controller {

答案 3 :(得分:0)

在你的htaccess中......而不是

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

尝试

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

并按照说明在您的CI配置集base_url中(包括尾随/!)

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

应该这样做。