Symfony на виртуальном хосте (проблема с корнем документа) - PullRequest
3 голосов
/ 11 мая 2010

Я разрабатываю приложение в Symfony и на localhost (XAMPP). Я хочу смоделировать те же условия, что и на веб-сервере.

Веб-сервер настроен следующим образом:

/www   => mydomain.com
/foo   => foo.mydomain.com
/bar   => bar.mydomain.com
...

Я собираюсь поместить свое приложение Symfony в директорию /www, поэтому будет:

/www
/www/apps
/www/apps/frontend
/www/apps/frontend/...
/www/apps/backend
/www/apps/backend/...
/www/cache
/www/config
... and so on...
/www/web

Дело в том, что корень документа по-прежнему установлен в каталог /www, но Symfony ожидает его в /www/web.
Конечно, это будет работать, если я позвоню http://mydomain.com/web, но я думаю, вы понимаете, что это тихое глупое решение.

Итак, мой вопрос : Есть ли способ, как я могу изменить / обойти настройку корня документа по умолчанию, используя .htaccess или что-то еще?

РЕДАКТИРОВАТЬ: Я решил это .

Ответы [ 3 ]

4 голосов
/ 11 мая 2010

Я не знаю много о Symfony, но /web должен быть корнем документа. Все остальные каталоги должны находиться за пределами корня документа по соображениям безопасности для одного и во избежание добавления части /web в URL для другого. Но, похоже, ты это уже знаешь.

Если вы можете редактировать конфигурацию веб-сервера, попробуйте отразить это и задайте DocumentRoot для веб-каталога.

Если вы не можете сделать это: невозможно изменить DocumentRoot в файле .htaccess, но можно переписать все запросы, чтобы они перешли на /web внутри, используя mod_rewrite. Это глупо, но, вероятно, лучшее решение, если вы не можете повлиять на DocumentRoot.

Я не гуру mod_rewrite, поэтому я не могу привести пример (сначала я должен был бы его протестировать, а сейчас не могу), но я уверен, что кто-то найдет. Возможно добавьте тег mod_rewrite к вашему вопросу.

Обновление: Не проверено, но должно работать. Поместить в файл .htaccess в /www:

RewriteEngine on
RewriteBase /

RewriteCond %{REQUEST_URI} !^/web/ 
RewriteRule .* /web/%1 [QSA]

Затем вам потребуется изменить файлы конфигурации, чтобы использовать http://www.domain.com/ вместо http://www.domain.com/web/, конечно.

Я не могу сказать, мешает ли это каким-либо другим .htaccess правилам на стороне Symfony - вам придется попробовать.

0 голосов
/ 16 мая 2010

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

// config/ProjectConfiguration.class.php
class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    $this->setWebDir($this->getRootDir().'/www/or/whatever/directory');
  }
}
0 голосов
/ 11 мая 2010

Если вы получили доступ к конфигурации apache, тем лучше переместить корневой каталог документа из /www в /www/web в вашем config.Host и разрешить php (если он ограничен open_basedir директивой конфигурации) доступ ко всему /www каталог.

...