CodeIgniterフレームワークで実行されているWebサイトでブログスクリプトを設定しようとしています。既存のウェブサイトのコードに大きなコード変更を加えずにこれを実行したいと思います。別のコントローラーを指すサブドメインを作成することが、これを行う最もクリーンな方法であると考えました。
新しいBlog
コントローラーをセットアップするために行った手順は次のとおりです。
routes.php
ファイルに新しいルールを追加します。これが私が思いついたものです:
switch ($_SERVER['HTTP_Host']) {
case 'blog.notedu.mp':
$route['default_controller'] = "blog";
$route['latest'] = "blog/latest";
break;
default:
$route['default_controller'] = "main";
break;
}
これは、blog.notedu.mp
とblog.notedu.mp/latest
が私のblog
コントローラーを指しているはずです。
今ここに問題があります...
blog.notedu.mp
またはblog.notedu.mp/index.php/blog/latest
にアクセスすると正常に機能しますが、blog.notedu.mp/latest
にアクセスすると、何らかの理由で404ページに移動します...
私の.htaccessファイルは次のようになります(URLからindex.phpを削除するためのデフォルト):
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
そして、私のBlog
コントローラーには次のコードが含まれています。
class Blog extends CI_Controller {
public function _remap($method){
echo "_remap function called.\n";
echo "The method called was: ".$method;
}
public function index()
{
$this->load->helper('url');
$this->load->helper('../../global/helpers/base');
$this->load->view('blog');
}
public function latest(){
echo "latest working";
}
}
私はここで何を見逃しているのですか、それとも間違っているのですか?私は何日もこの問題の解決策を探していました:(
4日間の試行錯誤の末、ついにこの問題を修正しました。
.htaccessの問題であり、次のルールで修正されたことが判明しました。
RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]
この質問を読んだり答えたりしてくれたすべての人に感謝します。
Blog.domain.co/blog/latestにも404が表示されますか?デフォルトのコントローラーの_remap()関数を確認することもできます。 http://ellislab.com/codeigniter/user-guide/general/controllers.html#default
基本的に、CodeIgniterはURIの2番目のセグメントを使用して、コントローラー内のどの関数が呼び出されるかを決定します。 _remap()関数を使用して、この動作をオーバーライドします。
ユーザーガイドから直接、
コントローラに_remap()という名前の関数が含まれている場合、URIに含まれているものに関係なく、常に呼び出されます。これは、URIが呼び出される関数を決定する通常の動作をオーバーライドし、独自の関数ルーティングルールを定義できるようにします。
public function _remap($method)
{
if ($method == 'some_method')
{
$this->$method();
}
else
{
$this->default_method();
}
}
お役に立てれば。
apacheのサブドメインの構成ファイルに「AllowOverrideAll」がありますか?
それがないと「blog.notedu.mp/index.php/blog/latest」は完全に機能しますが、「blog.notedu.mp/latest」はありません