Запустите один и тот же сайт Zend_Framework на нескольких доменах с Zend_Controller_Router_Route_Hostname
Мне нужно запустить один и тот же сайт на основе zend_framework для работы в нескольких доменах, и мое приложение должно знать, в каком домене оно работает. Я подумал, что было бы неплохо использовать Zend_Controller_Router_Route_Hostname, но я столкнулся с некоторыми проблемами.
У меня есть следующий код в моей загрузке
$ctrl = Zend_Controller_Front::getInstance();
$router = $ctrl->getRouter();
$router->removeDefaultRoutes();
$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
':sub-domain.:domain.:tld'
);
$defaultRoute = new Zend_Controller_Router_Route(
':controller/:action/*',
array(
'controller' => 'index',
'action' => 'index'
)
);
$router->addRoute('default',$hostnameRoute->chain($defaultRoute));
Я получаю следующую ошибку "не указан субдомен". Я думаю, что отследил это до того, что $this->url в моем файле макета использует определенные маршруты для сборки URL до того, как маршрут сопоставляется с URL-адресом запроса. Если я устанавливаю значения по умолчанию для маршрута имени хоста, я не получаю сообщение об ошибке, но URL-адреса в макете используют значения по умолчанию вместо значений в текущем имени хоста.
Кто может помочь мне решить эту проблему?
2 ответа
Вы должны определить значение по умолчанию для поддоменов. Изменить $defaultRoute
к этому:
$defaultRoute = new Zend_Controller_Router_Route(
':controller/:action/*',
array(
'controller' => 'index',
'action' => 'index'
)
);
Он должен работать.
У вас проблема с генерацией URL. Вы должны указать параметры для переменных в определении маршрута для вашего имени хоста следующим образом:
echo $this->url(array('sub-domain' => 'your-subdomain-here', 'domain' => 'your-domain', 'tld' => 'com'), 'default');
В противном случае помощник Zend URL не сможет сгенерировать URL для вашего определения: поддомен.: Домен.: Tld. Приведенный пример сгенерирует этот URL: your-subdomain-here.your-domain.com/current_controller/current_action
Также проверьте, является ли поддомен допустимым именем переменной. Попробуйте изменить его на поддомен.