CodeIgniter 不会在“/”上加载默认控制器

CodeIgniter doesn't load default controller on '/'

我将 CodeIgniter 与 Nginx 结合使用。 我刚刚从 CodeIgniter 2.2.6 升级到 3.1.4,遵循所有变更日志和升级说明。一切正常,但默认控制器,即 http://francescoruvolo.it (or even http://francescoruvolo.it/index.php) 显示 404 页面,但所有其他路由规则都有效,我能够加载其他控制器。

这是我的 routes.php:

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

我也试过注释所有路由,但默认路由仍然被忽略。不过,如果我去 http://francescoruvolo.it/Pages/show or either http://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 formatted",这意味着来自 CodeIgniter 的 index.php 实际上是 运行,但未能加载控制器。

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

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

这是错误的:

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

这是正确的:

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

不过,我不太明白为什么。事实上,如果我显式加载控制器,它甚至可以使用额外的斜杠。

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