Проект Symfony2 в подкаталоге

В настоящее время я работаю над приложением Symfony2, которое на данный момент должно размещаться внутри подкаталога. Обычно можно было бы изменить DocumentRoot в виртуальном хосте Apache, но в настоящее время это невозможно. Также невозможно разместить что-либо в корневом каталоге (например, выше public_html/).

DocumentRoot установлен в /public_html/. Структура с приложением Symfony2 в подкаталоге выглядит так:

- public_html/
-- dev/
---- app/
---- bin/
---- src/
---- vendor/
---- web/

Без какой-либо специальной настройки приложение можно открыть по адресу http://example.com/dev/web/app.php. Однако я хочу изменить это на http://example.com/dev без необходимости перемещать файлы.

Я придумал следующее .htaccess:

RewriteEngine on
RewriteCond %{REQUEST_URI} !dev/web/
RewriteRule (.*) /dev/web/app.php/$1 [L]

Это вроде работает, но Symfony2 сообщает о следующей ошибке: No route found for "GET /dev/".

Если я изменю RewriteRule на RewriteRule (.*) /dev/web/$1 [L], я смогу получить доступ к приложению с помощью http://example.com/dev/app.php/dashboard (примером, конечно же, является панель инструментов), что приводит к No route found for "GET hboard", обратите внимание на hboard. Вызов http://example.com/dev/app.php/ действительно отображает страницу в / отлично, и ссылки на все активы также работают нормально.

Любая помощь приветствуется. Со временем это приложение также должно перейти с dev/ на /. Так что решение для этого также приветствуется.


person Htbaa    schedule 01.10.2013    source источник


Ответы (1)


Файл web/.htaccess по умолчанию из Symfony2 выглядит следующим образом:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ app.php [QSA,L]
</IfModule>

Вы должны добавить dev/web/ перед app.php и переместить его в корневой каталог.

РЕДАКТИРОВАТЬ:

После некоторых исследований я нашел этот ответ на SO. Таким образом, новый .htaccess должен быть таким:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^((?!dev/web/).*)$ dev/web/app.php [QSA,L]
</IfModule>

Также посмотрите на

person ferdynator    schedule 01.10.2013
comment
Как указано в вопросе, я не могу изменить DocumentRoot. - person Htbaa; 01.10.2013
comment
Извините, я неправильно прочитал вопрос. Обновил мой ответ. Я надеюсь, что это более полезно. - person ferdynator; 01.10.2013
comment
Это по-прежнему приводит к ошибке No route found for "GET /dev/dashboard" или "GET /dev/" для /. - person Htbaa; 01.10.2013
comment
Обновленный ответ снова. - person ferdynator; 02.10.2013
comment
Это корневой каталог, например. public_html или public_html/dev, куда мне нужно поместить .htaccess? Я уже пробовал последний, но это не дало желаемых результатов. Глядя на пути, я думаю, это должно быть в public_html? - person Htbaa; 02.10.2013
comment
Я решил переместить все в корневой каталог. Все, что мне нужно сделать сейчас, это то, что вещи из каталога bundles/ будут сервером, но это просто переписать. - person Htbaa; 02.10.2013