我正在使用CodeIgniter和Nginx。 我刚刚从CodeIgniter 2.2.6升级到3.1.4,遵循所有更改日志和升级说明。一切都很完美,但默认控制器,即http://francescoruvolo.it(甚至http://francescoruvolo.it/index.php)显示404页面,但所有其他路由规则都有效,我可以加载其他控制器。
这是我的<xsl:value-of select="@value"/>
:
routes.php
我还试图评论所有路线,但仍然会忽略默认路线。不过,如果我去http://francescoruvolo.it/Pages/show或http://francescoruvolo.it/en,控制器加载得很好并且可以正常工作。很多人都有类似的问题,因为他们错过了强制执行课程大写名称的部分,但事实并非如此,因为我的控制器&#39;名称已经修复。
这些是$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;
中的参数:
config.php
并且Nginx看起来正确地将所有请求转发到$config['base_url'] = 'http://francescoruvolo.it/';
$config['index_page'] = '';
$config['uri_protocol'] = 'REQUEST_URI';
,实际上我并不需要在明确加载控制器时指定它。无论如何,这些行是我主机的Nginx配置的一部分:
index.php
我不能得到的是,我实际上能够获得两种不同类型的404页面。例如,如果我转到http://francescoruvolo.it/nonexistent.php Nginx正确地为我提供了404页面。同时,如果我没有指定任何路径或明确指定location / {
try_files $uri $uri/ /index.php;
}
,我得到一个404&#34;格式良好的&#34;,这意味着CodeIgniter的index.php实际上已经运行了,但它无法加载控制器。
我错过了什么?我还能检查什么?
答案 0 :(得分:4)
解决。显然,我在默认路线的末尾有一个额外的(不需要的)/
。
这是错误的:
$route['default_controller'] = "Pages/show/";
这是正确的:
$route['default_controller'] = "Pages/show";
尽管如此,我还是不明白为什么。事实上,如果我明确加载控制器,它甚至可以使用额外的斜杠。
如果有人解释这一点,我很乐意接受他的回答。 :)