2017-05-29 130 views
3

我使用CodeIgniter和Nginx。 我已经从CodeIgniter 2.2.6升级到3.1.4,遵循所有更新日志和升级说明。一切正常,但默认的控制器,即http://francescoruvolo.it(或甚至http://francescoruvolo.it/index.php)显示404页面,但所有其他路由规则的作品,我可以加载其他控制器。CodeIgniter不会在'/'上加载默认控制器

这里是我的routes.php

$route['(it|en)/contact/check_form'] = "Email/validate_form/$1"; 
$route['(it|en)/contact'] = "Email/show_form/$1"; 
$route['(it|en)/(:any)'] = "Pages/show/$1/$2"; 
$route['(it|en)'] = "Pages/show/$1"; 
$route['default_controller'] = "Pages/show/"; 
$route['404_override'] = ''; 
$route['translate_uri_dashes'] = FALSE; 

我也试图发表评论的所有路线,但还是默认的一个被忽略。不过,如果我去http://francescoruvolo.it/Pages/showhttp://francescoruvolo.it/en,控制器加载得很好,它的工作原理。很多人都遇到类似的问题,因为他们错过了为类实施大写名称的部分,但事实并非如此,因为我的控制器名称已经修复。

这些参数在config.php

$config['base_url'] = 'http://francescoruvolo.it/'; 
$config['index_page'] = ''; 
$config['uri_protocol'] = 'REQUEST_URI'; 

而且Nginx的看起来是正确转发所有请求index.php,其实我并不需要显式地加载控制器时指定它。无论如何,这些线是对我的主机Nginx的配置的一部分:

location/{ 
    try_files $uri $uri/ /index.php; 
} 

我不明白的是,我居然能够获得两种不同类型的404页。例如,如果我去http://francescoruvolo.it/nonexistent.php Nginx正确地为我提供一个404页面。同时,如果我没有指定任何路径或明确指定index.php,我会得到一个404“well格式化”,这意味着来自CodeIgniter的index.php已经实际运行,但未能加载控制器。

我错过了什么?我还能检查什么?

+0

https://stackoverflow.com/questions/12757211/codeigniters-default-controller-doesnt-load –

+0

@RobertRocha谢谢,但是这并不能解决我的问题。他说他有一个空白页面,而我从CodeIgniter获得一个404页面而不是Nginx,这意味着CodeIgniter可以正常工作。 – Zagorax

+0

尝试在routes.php中使用小写'$ route ['default_controller'] =“pages/show”;' – user4419336

回答

4

已解决。显然,我在我的默认路由结尾处有一个额外的(不需要的)/

这是错误的:

$route['default_controller'] = "Pages/show/"; 

这是正确的:

$route['default_controller'] = "Pages/show"; 

不过,我不太明白为什么。事实上,如果我明确加载控制器,即使使用额外的斜线,它也可以工作。

如果有人解释这一点,我会很乐意接受他的回答。 :)

+1

“如果有人解释这一点,我会很乐意接受他的回答:)”他们在[docs ](https://www.codeigniter.com/user_guide/general/routing.html#examples):“重要提示:不要使用前导/后沿斜杠。” :)另外,根据文档,默认路线应该保持在最前面。 – Tpojka

+0

@Tpojka在版本3.X中这是新的东西,因为在升级之前我有同样的路线,它一直运行得非常完美。感谢您的输入! :) – Zagorax