2017-05-29 9 views
3

NginxでCodeIgniterを使用しています。 私は、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; 

私もすべてのルートをコメントしようとしましたが、まだデフォルト1は無視されます。それでも、私が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'; 

そして、それは正しく、私は明示的にコントローラをロードするときに、それを指定する必要はありません実際には、index.phpにすべての要求を転送しているようにnginxのが見えます。

location/{ 
    try_files $uri $uri/ /index.php; 
} 

私は何を得ることはありませんが、私は実際に404ページの二つの異なる種類を取得することができるよということです:とにかく、これらの行は、ホストのための私のnginxの設定の一部です。たとえば、私がhttp://francescoruvolo.it/nonexistent.phpに行くと、Nginxは私に404ページを正しく提供します。同時に、パスを指定しなかった場合、または明示的にindex.phpを指定した場合は、「整形済み」という404が表示されます。つまり、CodeIgniterのindex.phpは実際に実行されましたが、コントローラをロードできませんでした。

私には何が欠けていますか?他に何が確認できますか?

+0

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

+0

@RobertRochaありがとう、しかしそれは私の問題を解決しません。 CodeIgniterがNginxからではなく、CodeIgniterから404ページを得ている間に、CodeIgniterが正しく動作していることを意味しています。 – Zagorax

+0

routes.phpの小文字で試してください '$ route ['default_controller'] =" pages/show ";' – user4419336

答えて

4

解決済み。どうやら、デフォルトルートの最後に余分な(不要な)/がありました。

これは間違っていた:

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

これが正しい:

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

、私はかなり理由を得ることはありません。実際にコントローラを明示的にロードすると、余分なスラッシュでも機能します。

誰かがこれについて説明すると、私は彼の答えを喜んで受け入れるでしょう。 :)

+1

"誰かがこれを説明してくれれば、私は喜んで答えを受け入れるでしょう:)" ](https://www.codeigniter.com/user_guide/general/routing.html#examples):「重要:先行/後続のスラッシュを使用しないでください。」 :)また、ドキュメントによれば、デフォルトルートは一番上にとどまるべきです。 – Tpojka

+0

@Tpojkaアップグレードする前に同じルートを使用していたので、これはバージョン3.Xの新機能でなければならず、いつも完璧に機能しています。あなたのご意見ありがとうございます! :) – Zagorax

関連する問題