注: 逆マッチング
ルートは逆の順序でマッチングされるため、最も一般的なルートが最初に定義されていることを確認してください。
(Zend_Controller_Router)
したがって、最初に他のすべてのサブドメインのルートを定義し、次に特定のサブドメインを定義する必要があります。
$user = new Zend_Controller_Router_Route_Hostname(
':subdomain.site.com',
array(
'controller' => 'user'
)
);
$location1 = new Zend_Controller_Router_Route_Hostname(
'c.site.com',
array(
'controller' => 'location'
)
);
$location1 = new Zend_Controller_Router_Route_Hostname(
'd.site.com',
array(
'controller' => 'location'
)
);
// other definitions with known subdomain
$router->addRoute($user); // most general one added first
$router->addRoute($location1);
$router->addRoute($location2);
// add all other subdomains
更新された質問の更新:
1) これは、サブドメインをルーティングするパラメーターの違いに大きく依存します。あなたの例では、それらをすべて同じモデルとコントローラーにルーティングし、実際のサブドメインをパラメーターとして追加しました。これは、上に投稿したユーザールートで簡単に実行できます。そこで、サブドメインがパラメーター subdomain ( $request->getParam("subdomain")
) として設定されます。サブドメインを既知のコントローラー/モデルのアクションにしたい場合は:subdomain
、:action
. しかし、サブドメインごとに他のコントローラー/モデルを用意したらすぐに、それらをループする (または構成ファイルを使用する) 必要があると思います。質問で提供した例では、ルートは次のようになります。
$user = new Zend_Controller_Router_Route_Hostname(
':param1.site.com',
array(
'controller' => 'user'
)
);
// routes "subdomain".site.com to defaultModul/userController/indexAction with additional parameter param1 => subdomain.
サブドメインにスキーマがない限り、一般的な方法でそれらをルーティングすることは非常に困難です。
2) これは、ルーター チェーンが機能する例です。外側のルートはサブドメインを処理するホスト名ルートであり、内側のルートはその:a/:b
部分を処理します。これは、たとえば次のようになります。
$user->chain(new Zend_Controller_Router_Route(':a/:b'));