0

私はCodeigniter1.7.2とHMVC(https://bitbucket.org/wiredesignz/codeigniter-modular-extensions-hmvc/wiki/Home)を使用しています。

私はこれらのファイルを持っており、それらはHMVCに従って編成されています。

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

routes.php、ルートを設定しました。

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

URLが次のパターンの場合、すべてが機能します。 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メッセージはMX_Router.phpHMVCに付属しているから生成されていることがわかりました。具体的には、この関数からのものです。

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();
}

呼び出されるのはshow_404()関数であるため、エラーメッセージが表示されます。index.phpしかし、削除されたURLパターンを使用すると、問題なくすべてのページにアクセスできるためです。

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

誰かが以前に同じ問題に遭遇したことがありますか?みなさん、ありがとうございました。

4

2 に答える 2

3

問題はどういうわけかfavicon.icoに関連していると思います。一部のウェブブラウザは自動的にyourdomain.com/favicon.icoをリクエストし、利用可能なものがない場合は、ログに404エラーが生成されます。

于 2011-01-06T07:40:28.767 に答える
0

おそらく、エラーは.htaccessファイルにあります。公式ユーザーガイドには、実際にこの例があります。

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

.htaccessのこのコードでも問題は発生しますか?

于 2011-01-02T02:32:10.533 に答える