tsujioka
tsuji****@m-s*****
2008年 6月 8日 (日) 22:39:12 JST
kunitsujiです たとえば、問題があるということになると次のようなケースでしょうか? localhost/index.php/diary/ これでwelcom.phpが開きます。 デフォルトコントローラが開くということですね。 けど、この場合diaryディレクトリが指定されています。 DiaryディレクトのWelcomコントローラならいいと思いますが、意図せず トップのでふぉるとがひらいていますよね? 意図しているということであれば仕様ですが、 Diaryディレクトリがあるかないかは通常利用者からは見えません。 index.php/hoge/ とやった場合、存在してないコントローラですと404をかえすなら、 Diary/でデフォルトコントローラがない場合は404が普通だと思いました。 Diaryディレクトリの下のものを、と期待してしまいます。 localhost/index.php/diary/ localhost/index/php/hoge/ 同じようなURLでもディレクトリがあればトップのデフォルトコントローラが開き、 ないものは404というのはおかしい気がします。 hoge/の場合でもデフォルトが開くなら仕様として同じといえますが。。 > Kenji です。 > > > このパッチですが、rsegments の話とは別(一部からみますが)のデフォルトコントローラ > > が何か?という仕様の問題じゃないかと思います。 > > ということで、本家フォーラムに投げてみました。 > http://codeigniter.com/forums/viewthread/81744/ > > 実際、現状の仕様だと、どういう問題が生じるのか、あげた方がいいと思います。 > > > On Wed, 4 Jun 2008 01:05:19 +0900 > "tsujioka" <tsuji****@m-s*****> wrote: > >> 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(); >> } >> >> とするのが正しいと思いますが、どうでしょう? > > そう考えることもできますが、そのディレクトリにコントローラがない場合に > 呼ばれるのがデフォルトコントローラとすれば、現状の実装も誤りとはいえないと > 思います。 > > 上記のパッチでは、単にエラー表示して終了なので、rsegments の値は、関係 > なくなりますね。 > > >> ディレクトリが存在して、その下にデフォルトコントローラーと同じ >> 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 >> >> _______________________________________________ >> Codeigniter-users mailing list >> Codei****@lists***** >> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users > > _______________________________________________ > Codeigniter-users mailing list > Codei****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users