Помощь в сопоставлении или маршрутизации субдомена в Zend Framework Controller (мобильная версия сайта) - PullRequest
4 голосов
/ 21 января 2011

Я пытаюсь использовать поддомен для специальной мобильной версии моего приложения ZF. В идеале он будет привязан к конкретному контроллеру, как в примере ниже, но на данный момент я готов попробовать любой метод, который работает:

Ex. m.domain.com/action будет направлять на «мобильный» контроллер и указывать любое действие.

Я нашел несколько похожих вопросов здесь и в других местах в Google, но у меня возникает ощущение, что я упускаю что-то очевидное, потому что независимо от того, какой маршрут я выбрал, он просто игнорируется. Я подозреваю, что это как-то связано с htaccess, но может и ошибаться.

Вот маршрут, который у меня сейчас есть в моем файле начальной загрузки (но я попробовал здесь несколько разных шаблонов). Сейчас я просто пытаюсь заставить его показать простой индекс для простоты:

$hostRoute = new Zend_Controller_Router_Route_Hostname(':subdomain.domain.com', 
        array(
            'controller' => 'index',
            'action' => 'index'
            )
    );
$plainPathRoute = new Zend_Controller_Router_Route(':controller/:action/*',     
    array('controller' => 'index', 'action' => 'index'));
$controller->getRouter()->addRoute('mobile', $hostRoute->chain($plainPathRoute));

И мой htaccess имеет:

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]

Теперь есть 2 метода, которые я пробовал здесь, потому что был очень расстроен.

  1. Создать поддомен "m" внутри моей учетной записи хостинга
  2. Субдомен "app" не существует в моей учетной записи веб-хостинга

Для метода 1 он просто идет в общий файл index.html, который находится в domain.com/m/. Метод 2 говорит мне, что страница не существует.

Я действительно надеюсь, что здесь есть что-то очевидное, что мне не хватает. Как я уже упоминал выше, я не придирчив к тому, как именно это выполняется, если у меня есть субдомен, указывающий на конкретный контроллер. Это будет очень упрощенная версия сайта, поэтому мне не нужно делать ничего сложного.

Спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 24 января 2011

Прежде всего, вам необходимо настроить виртуальный хост для обработки нескольких доменов:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAlias m.example.com
    ServerAlias www.m.example.com
    ...

Вы также можете сделать это, добавив новый поддомен, указывающий на корень вашего сайта, с помощью параметров панели хостинга.

Затем вы можете создать цепочку маршрутов, как в вашем примере, или обработать коммутатор самостоятельно, например, в плагине контроллера:

$host = strtolower($request->getServer('HTTP_HOST'));
if ('m.' === substr($host, 0, 2) || 'www.m.' === substr($host, 0, 6)) {
    $themes->setTheme('m');
    $userSession->theme = 'm';
    ...
1 голос
/ 22 января 2011

Я использую нечто подобное, но вместо сопоставления поддоменов с контроллером, я использую это для модуля, я использую следующий маршрут:

$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
        ':module.domain.com',
        array(
            'module' => 'default'
        )
    );
    $normalRoute = new Zend_Controller_Router_Route(
        ':controller/:action/*',
        array(
            'controller' => 'index',
            'action' => 'index'
        )
    );
    $router->addRoute('default', $hostnameRoute->chain($normalRoute));
...