2011-12-27 15 views
0

私はcodeigniterにSaaS Webアプリケーションを作成していますが、サブドメインが存在するかどうかに基づいて特定のコントローラにルーティングする方法を決定しようとしています。Codeigniter - サブドメインが存在するかどうかに基づいてコントローラをルーティングする方法

現在のところ、subdomain.example.comのURLを入力すると、デフォルトのコントローラがURLのサブドメインがデータベースに存在するかどうかをチェックし、そうでない場合はエラーページを表示します。

public function __construct() 
    { 
     parent::__construct(); 
     $subdomain_arr = explode('.', $_SERVER['HTTP_HOST'], 2); //creates the various parts 
     $subdomain_name = $subdomain_arr[0]; //assigns the first part 
     //echo "subdomain_name = $subdomain_name"; 

     // if the subdomain does not exist, redirect to error page 
     if(!$this->subdomainExists($subdomain_name)) { 
      redirect('error/index'); 
     } else { 
      $this->subdomain = $subdomain_name; 
     } 
    } 

これは、ユーザーがサブドメインを入力したURLのための素晴らしい作品が、今、ユーザーがこのようなexample.comなどのサブドメインなしのURLを入力した場合、私が使用する別のコントローラをしたいです。

これを達成する最も良い方法は何ですか?私は次のことを考えていましたが、誰かがexample.comに行くたびにリダイレクトが発生するのが最善の方法ではないようです。あなたが最も可能性の高いシナリオが何であるかを作業する必要がある

// if no subdomain was entered, redirect to controller 'aDifferentController' 
// else if a subdomain was entered, check that it exists in the database and if not redirect to an error page. 
if(the url entered does not contain a subdomain) { 
    redirect('aDifferentController'); 
} else if(!$this->subdomainExists($subdomain_name)) { 
    redirect('error/index'); 
} else { 
    $this->subdomain = $subdomain_name; 
} 

答えて

3

なぜサブドメインに基づいて経路を条件付きで宣言しないのですか? routes.phpの中

は、この

if (strstr($_SERVER['HTTP_HOST'], 'some-subdomain.mydomain.com')) { 
$route['uristring'] = "controller/method"; 
} 
+0

非常に良いアイデアのようです。私はこれで試してみるよ。私はむしろいつもリダイレクトをするより、これをやりたいと思う。 – Catfish

+0

素晴らしい作品。素晴らしいアイデアをありがとう。 – Catfish

0

、より多くの人々は、彼らがメインのサイトにアクセスする可能性が高くなり、サブドメインに移動する可能性が高いですね。

メインサイトに行く可能性が高い場合は、サブドメインが存在するかどうかを確認してください。の場合はとなり、それ以外の場合は続行します。

サブドメインに移動する可能性が高い場合は、サブドメインが存在するかどうかを確認します。でない場合は、をリダイレクトしてから、他のコントローラにリダイレクトします。

もう1つの選択肢(おそらく私の意見では)は、コードイグナイタにヒットする前に.htaccessを使ってリダイレクトを行うことですが、これはサーバーへのアクセスのレベルによって異なります。

+0

を行うことは、およそ50/50サブドメインのサイトと非サブドメインのサイトになります。 – Catfish

+0

本当にどちらの方法でも動作しますが、もしあなたがApacheを使用しているなら、私は.htaccessバージョンに投票します。 – Hailwood

+0

ルートを使用して行う方法はありますか?それとも、base_urlの後のURLの部分だけですか? – Catfish

関連する問題