Примечание: обратное сопоставление
Маршруты
в обратном порядке, поэтому убедитесь,
ваши самые общие маршруты определены
первый.
(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) Это действительно зависит от того, насколько разными параметрами вы хотите перенаправить поддомен. В вашем примере вы перенаправили их все на одну и ту же модель и контроллер и добавили фактический поддомен в качестве параметра. Это можно легко сделать с помощью пользовательского маршрута, который я разместил выше. Там субдомен задается как субдомен параметра ($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'));