编程语言
首页 > 编程语言> > PHP-CodeIgniter不会在’/’上加载默认控制器

PHP-CodeIgniter不会在’/’上加载默认控制器

作者:互联网

我在Nginx中使用CodeIgniter.
按照所有变更日志和升级说明,我刚刚从CodeIgniter 2.2.6升级到3.1.4.一切运行正常,但默认控制器(即http://francescoruvolo.it(甚至http://francescoruvolo.it/index.php))显示404页面,但所有其他路由规则均正常工作,并且我能够加载其他控制器.

这是我的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“格式正确”,这意味着CodeIgniter的index.php已实际运行,但无法加载控制器.

我想念什么?我还能检查什么?

解决方法:

解决了.显然,在默认路由的末尾有一个多余的(不需要的)/.

这是错误的:

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

这是对的:

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

不过,我不太明白为什么.实际上,如果我显式加载控制器,即使有额外的斜杠它也可以工作.

如果有人对此进行解释,我会很乐意接受他的回答.

标签:nginx,codeigniter,url-routing,php
来源: https://codeday.me/bug/20191026/1932750.html