Размещение проекта на Symfony framework на сервере

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

Есть как минимум 2 способы решения этой проблемы.

Первый. Не совсем красивый, но рабочий. Надо настроить modrewrite через .htaccess таким образом, чтобы перенаправлять адреса вида http://site/url -> http://site/web/url. Делается это следующим образом:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ web/$1 [L,QSA]
</IfModule>
В принципе, сойдет, но web в адресе как-то некошерно =) Второй. Для того, чтобы получить более красивые и естественные адреса, достаточно переместить содержимое директории web/ в root directory (httpdocs или другую в зависимости от настроек), но при этом надо указать новое размещение скриптов входа в Symfony framework:
//app.php
$loader = require_once __DIR__.'/app/bootstrap.php.cache';

...

require_once __DIR__.'/app/AppKernel.php';

Вместо дефолтных
$loader = require_once __DIR__.'/../app/bootstrap.php.cache';

...

require_once __DIR__.'/../app/AppKernel.php';

На этом фактически и все. Только не забудьте сменить директорию установки assets при последующих обновлениях (теперь их надо ставить в корень, а не в web/):
php app/console assets:install --env=prod .
php app/console assetic:dump --env=prod .
Также не помешает заменить IndexDirectory в .htaccess:
DirectoryIndex app.php