2017-05-29 134 views
3

我使用CodeIgniter和Nginx。 我已經從CodeIgniter 2.2.6升級到3.1.4,遵循所有更新日誌和升級說明。一切正常,但默認的控制器,即http://francescoruvolo.it(或甚至http://francescoruvolo.it/index.php)顯示404頁面,但所有其他路由規則的作品,我可以加載其他控制器。CodeIgniter不會在'/'上加載默認控制器

這裏是我的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「well格式化」,這意味着來自CodeIgniter的index.php已經實際運行,但未能加載控制器。

我錯過了什麼?我還能檢查什麼?

+0

https://stackoverflow.com/questions/12757211/codeigniters-default-controller-doesnt-load –

+0

@RobertRocha謝謝,但是這並不能解決我的問題。他說他有一個空白頁面,而我從CodeIgniter獲得一個404頁面而不是Nginx,這意味着CodeIgniter可以正常工作。 – Zagorax

+0

嘗試在routes.php中使用小寫'$ route ['default_controller'] =「pages/show」;' – user4419336

回答

4

已解決。顯然,我在我的默認路由結尾處有一個額外的(不需要的)/

這是錯誤的:

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

這是正確的:

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

不過,我不太明白爲什麼。事實上,如果我明確加載控制器,即使使用額外的斜線,它也可以工作。

如果有人解釋這一點,我會很樂意接受他的回答。 :)

+1

「如果有人解釋這一點,我會很樂意接受他的回答:)」他們在[docs ](https://www.codeigniter.com/user_guide/general/routing.html#examples):「重要提示:不要使用前導/後沿斜槓。」 :)另外,根據文檔,默認路線應該保持在最前面。 – Tpojka

+0

@Tpojka在版本3.X中這是新的東西,因爲在升級之前我有同樣的路線,它一直運行得非常完美。感謝您的輸入! :) – Zagorax