Zend Framework в подкаталоге - PullRequest
       38

Zend Framework в подкаталоге

2 голосов
/ 01 декабря 2011

Я бьюсь об стену с этим ...

Мне нужно установить приложение Zend Framework внутри подкаталога.

то есть домен tricell.ss, и я хочу использовать tricell.ss / tricell в качестве основного каталога приложения.

Что сделано:

  1. Я установил в моей конфигурации (application.ini):

    resources.frontController.baseUrl = "/tricell"
    
  2. Я сделал еще одну переменную в моей конфигурации

    baseUrl  = "/tricell"
    
  3. В моем Boostrap у меня есть это:

    $router     = new Zend_Controller_Router_Rewrite();
    $frontController->setRouter($router);
    $frontController->setBaseUrl($this->config->baseUrl);        
    
    $frontController->dispatch();
    
  4. В моем макете я пытаюсь отобразить изображение с помощью:

    $this->baseUrl('/img/btn.png')
    
  5. Вот моя конфигурация vhost:

    <VirtualHost *:80>
    DocumentRoot "/HTDOCS/tricell/tricell/public_html"
    ServerName tricell.ss
    RewriteRule ^$ [L] 
    
    RewriteEngine On
    RewriteCond %{HTTP_HOST} ^(www.)?tricell.ss$
    RewriteRule ^(/)?$ tricell [L]
    </VirtualHost>
    
  6. вот мой .htaccess:

SetEnv APPLICATION_ENV development

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

Проблема в том, что когда я пытаюсь отобразить изображение, ничего не происходит.Когда я пытаюсь получить изображение по URL:

http://tricell.ss//tricell/img/btn.png

Я получаю информацию о неправильном контроллере.Как я могу сделать это правильно?Я могу (без каких-либо проблем) настроить конфигурацию корневого домена, например tricell.ss, а затем получить изображение, например tricell / ss / img / btn.png, но я хочу работать с подкаталогом, а я не могу сделать это с изображениями.Что я тут не так делаю?

Ответы [ 2 ]

1 голос
/ 01 декабря 2011

Мне только что удалось решить мою проблему ... это довольно просто, но я был очень смущен всеми этими правилами переписывания.

Как говорится, всегда трицилл сбивает с толку, давайте внесем некоторые изменения в это.Таким образом, чтобы получить что-то вроде tricell.ss / sub, мне нужно:

  1. Поместить все мое приложение в / HTDOCS / tricell / tricell / sub
  2. Изменить мой vhost из этой строки:DocumentRoot "/ HTDOCS / tricell / tricell / public_html" to: DocumentRoot "/ HTDOCS / tricell / tricell /"
  3. Вставить еще один .htaccess в мой каталог / HTDOCS / tricell / tricell / sub:

    RewriteEngine вкл.

RewriteRule ^ .htaccess $ - [F]

RewriteCond% {REQUEST_URI} = "" RewriteRule ^. * $ / Sub /ublic_html / index.php [NC, L]

RewriteCond% {REQUEST_URI}! ^ / sub / public_html /. $ RewriteRule ^ (. ) $ / sub / public_html / $ 1

RewriteCond% {REQUEST_FILENAME} -f RewriteRule ^. * $ - [NC, L]

RewriteRule ^ public_html /.*$ /sub/public_html/index.php [NC, L]

Это решило все мои проблемы.

1 голос
/ 01 декабря 2011

Я думаю, что самое простое, что вы можете сделать, чтобы это заработало, это:

Начните с нового проекта ZF или удалите все ваши Zend-маршруты и любую специальную конфигурацию в .htaccess или httpd.conf / httpd-vhosts.conf, которые вы создали.

Избавьтесь от опций baseUrl, которые вы установили в своем конфигурационном файле.

Поместите файл index.php и файл .htaccess в папку /HTDOCS/tricell/tricell/public_html/tricell.

Поместите остальную часть вашего проекта (контроллеры, модели, конфигурации и т. Д.) За пределы вашего корневого веб-каталога. В этом примере я предполагаю, что они помещены в /HTDOCS/tricell/tricell/zfproject.

Отредактируйте index.php и измените:

defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application'));

// to:

defined('APPLICATION_PATH')
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../../zfproject/application'));

Теперь ваше приложение будет работать с базовым каталогом yoursite.com/tricell

. URL

IndexController.php будет http://yoursite.com/tricell/index

Вам не нужно делать ничего особенного, чтобы сообщить Zend, что ваш базовый URL-адрес - "tricell". Просто убедитесь, что в ваших скриптах вида используется $this->baseUrl() для ваших путей, чтобы вам не приходилось беспокоиться о ручном добавлении / tricell в начало всего, и если вы когда-нибудь переместите свой проект в другой каталог / путь, ничего не нужно быть изменены, чтобы иметь дело с новыми путями.

...