我使用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 ,控制器加载得很好,它的工作原理。 很多人也遇到过类似的问题,因为他们错过了为class级实施大写字母的部分,但事实并非如此,因为我的pipe制员的名字已经修好了。
这些是config.php
中的参数:
$config['base_url'] = 'http://francescoruvolo.it/'; $config['index_page'] = ''; $config['uri_protocol'] = 'REQUEST_URI';
而Nginx看起来好像正确地将所有请求转发到index.php
,实际上我不需要明确地加载控制器时指定它。 无论如何,这些行是主机的Nginxconfiguration的一部分:
location / { try_files $uri $uri/ /index.php; }
我没有得到的是,我实际上能够得到两个不同types的404页。 例如,如果我去http://francescoruvolo.it/nonexistent.php Nginx正确地为我提供了一个404页面。 同时,如果我没有指定任何path或明确指定index.php
我得到一个404“格式良好”,这意味着从CodeIgniter的index.php已经被实际运行,但它没有加载控制器。
我错过了什么? 我还能检查什么?
解决了。 显然,我有一个额外的(不需要的) /
在我的默认路线结束。
这是错误的:
$route['default_controller'] = "Pages/show/";
这是对的:
$route['default_controller'] = "Pages/show";
不过,我不明白为什么。 事实上,如果我明确地加载控制器,它甚至可以用额外的斜线工作。
如果有人解释这一点,我会很乐意接受他的答案。 🙂