tsujioka
tsuji****@m-s*****
2008年 6月 4日 (水) 01:05:19 JST
kunitsujiです。 パッチの前に説明を。 http://localhost/index.php この場合、デフォルトコントローラーが welcome で指定されている場合、 自動的に次のようになります。 http://localhost/index.php/welcome で存在しないコントローラを指定した場合、404になります http://localhost/index.php/hoge application/controllers/hoge/top.php というものが存在している場合、どうなりますか? 実際には、これは http://localhost/index.php/welcome これと同じものが開きます。。。。。 ディレクトリがある場合、index.php/hoge/ と入力すると、デフォルトコントローラーが呼ばれてしまいます。 Router.phpの216行目 if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT)) { $this->directory = ''; return array(); } array()をかえしてしまっているので、エラーとして処理されません。 先日のrsegmentsがおかしいのもここが影響していますね。 この場合 if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT)) { $this->directory = ''; show_404(); } とするのが正しいと思いますが、どうでしょう? ディレクトリが存在して、その下にデフォルトコントローラーと同じ welcomeコントローラーが存在すればOKですが、ない場合は404を返したほうがいいと思います。 パッチ Index: system/libraries/Router.php =================================================================== --- system/libraries/Router.php (revision 16) +++ system/libraries/Router.php (working copy) @@ -216,7 +216,7 @@ if ( ! file_exists(APPPATH.'controllers/'.$this->fetch_directory().$this->default_controller.EXT)) { $this->directory = ''; - return array(); + show_404(); } } いや、これが正しい動きならいいですが、バグだと思われるので検証していただければ。 Kenjiさん、よろしくです。 もっとよくみたら、$this->directory = ''; もおかしですよね。。ディレクトリがあるのを認識しているのに’’にしている。 show_404()の上の$this->directory = '';も消してもいいかもしれません。 簡単な例として、inkTypeのadmin で検証してもらえればすぐわかります。 inkType.jp/index.php/admin/ これだとTOPが開くはず。 controllers/にadminコントローラーがあるのであればそれが開くはずだし、ありません。 これはadmin/adminとしたら正常に動きます。 adminディレクトリにadminコントローラが見つかった場合ですね。 kunitsuji