2011-01-02 16 views
0

私はCodeigniter 1.7.2とHMVC(https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/wiki/Home)を使用しています。 。Codeigniter 1.7.2 + HMVCを使用して404ページがログに記録されない

私はこれらのファイルを持っており、それらがHMVCに応じて編成されています。routes.php

system/application/modules/welcome/controllers/welcome.php 
system/application/modules/welcome/views/index.php 

、私はルートを設定している:URLはこの中であれば

routes['welcome']='welcome/index'; 

すべてが動作しますパターン: http://www.mydomain.com/index.php/welcome

しかし今、私はURLからindex.phpを削除したいので、.htaccessファイルを作成しました:

RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /index.php?$1 [L] 

は、その後、私は空にし$config['index_page']を設定します。

$config['index_page'] = ""; 

私はこのURLパターン内のページにアクセスすることができます。すべてが動作するように思われるが http://www.mydomain.com/welcome

、私はそれをすべての時間を見つけます私はページにアクセスし、ログに404ページが見つかりませんでしたエラーを生成します:

DEBUG - 2011-01-02 08:28:52 --> URI Class Initialized 
ERROR - 2011-01-02 08:28:52 --> 404 Page Not Found --> 

これはwelcomeページに固有のものではありません。すべてのページに同じ問題があります。 コードを掘り下げ、この404 Page Not FoundメッセージがHMVCに付属のMX_Router.phpから生成されていることを発見しました。具体的には、次の関数から来ています。

public function _validate_request($segments) {  

    /* locate module controller */ 
    if ($located = $this->locate($segments)) return $located; 

    /* use a default 404 controller */ 
    if (isset($this->routes['404']) AND $segments = explode('/', $this->routes['404'])) { 
     if ($located = $this->locate($segments)) return $located; 
    } 

    /* use a default 404_override controller CI 2.0 */ 
    if (isset($this->routes['404_override']) AND $segments = explode('/', $this->routes['404_override'])) { 
     if ($located = $this->locate($segments)) return $located; 
    } 

    /* no controller found */ 
    show_404(); 
} 

これは、呼び出されたので、そのエラーメッセージが表示されます。しかし、私はindex.phpが削除されているURLパターンを使用しても問題なくすべてのページにアクセスできます。

この_validate_request()機能にコントローラが存在しないとHMVCは考えているのはなぜですか? 変更を元に戻すと404エラーメッセージがログに表示されませんが、これはまた、かなり悪く見えるindex.phpのURLパターンを使用し続ける必要があることを意味します。

誰も以前に同じ問題が発生しましたか? 多くの皆さん、ありがとうございました。

答えて

3

私はこの問題が何とかfavicon.icoに関係していると思うが、一部のWebブラウザは自動的にyourdomain.com/favicon.icoを要求し、利用できない場合はログに404エラーを生成する。

0

エラーが.htaccessファイルにある可能性があります。

RewriteEngine on 
RewriteCond $1 !^(index\.php|images|robots\.txt) 
RewriteRule ^(.*)$ /index.php/$1 [L] 

問題はまだあなたの.htaccessファイルに次のコードでは発生しない:公式user guideは、実際にはこのための例を持っていますか?

+0

このコードを使用すると、URLにindex.phpのないページにアクセスすると、Webブラウザに「入力ファイルが指定されていません。」と表示されます。しかし、私はURLにindex.phpを追加してから問題なくページにアクセスできます。これがどんな問題か分かりません。 – bobo

関連する問題