私は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.php
HMVCに付属しているから生成されていることがわかりました。具体的には、この関数からのものです。
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
ます。これはかなり見栄えが悪いです。
誰かが以前に同じ問題に遭遇したことがありますか?みなさん、ありがとうございました。