5

MVCフレームワーク(Yii)を使用してWebサイトを作成していますが、サブドメイン、つまりhttp://company.website.comを動的に作成する必要があります。

したがって、これを実現するために、DNSワイルドカード(* .website.com)を追加しました。ここで問題となるのは、私のアプリケーションコントローラーがwww.website.comとcompany.website.comですべて同じであるということです。たとえば、アクション( )を備えたUserコントローラーがあります。これで、www.website.com / user / registerにアクセスすると登録できますが、 company.website.com / user/registerにアクセスするとまったく同じことができます。そして、この動作はすべてのコントローラーで同じです。Registeruser/register

すべてが正しく機能していることに気付きましたが、www.website.comとcompnay.website.comのコントローラーを分離するにはどうすればよいですか?ユーザーがサブドメインのURLから登録/ログイン/その他のコントローラーやアクションにアクセスすることを望んでいません。

どんな提案でも大歓迎です!

ありがとうございました!

4

2 に答える 2

4

You could include hostname into your routing rules array. For example, you could create rules

array(
    'http://www.website.com/user/register' => 'user/register',
    'http://<company:\w+>.website.com/user/register' => 'other/route',
)

and check for company parameter in your other/route action. Please note that http:// is required for those rules to work. See CUrlManager documentation for more details.

P.S. If controllers for http://www.website.com and http://company.website.com/user/register are completely different it could be better to set up two applications for those sites.

于 2010-08-03T16:09:25.570 に答える
2

あなたの質問を理解すると、URLの「company」コンポーネントは可変の会社名です。その仮定の下で答えを続けます。

もう1つのオプションは、会社モジュールを作成し(ここでは「会社」と呼びます)、CUrlManagerルールを使用してそのコントローラーにルーティングすることです。例えば

array(
    'http://<company:\w+>.website.com/user/register' => '/companies/user/register',
    'http://<company:\w+>.website.com/<_c:\w+>/<_a:\w+>' => '/companies/<_c>/<_a>' // more generic option
),

'company'文字列は$_GET['company']としてアプリケーションに渡され、CompaniesModule.phpファイルでこのパラメーターを使用して会社固有のデータをロードできます。

www.website.comリクエストを処理するための他のルールがないと(Gray Teardropの回答によると)、そのサブドメインへのリクエストでエラーが発生することに注意してください。

于 2010-08-06T03:39:42.893 に答える