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/show或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“格式正确”,这意味着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