Используйте symfony 1.4 без изменения конфигурации apache

Можно ли установить каталог /web как webroot без изменения файла конфигурации apache?

Я попытался использовать следующий код .htaccess, но если я перехожу к localhost/module/, отображается ошибка 404. Но если я перехожу на localhost/web/module/, то все работает.

<IfModule mod_rewrite.c>
   RewriteEngine on
   RewriteRule    sf/(.*) lib/vendor/symfony/data/web/sf/$1 [L]
   RewriteRule    ^$ web/    [L]
   RewriteRule    (.*) web/$1 [L]
</IfModule>

person Ragnis    schedule 22.05.2010    source источник


Ответы (4)


я делаю так в корне:

RewriteEngine On
RewriteBase /
RewriteRule (.*) ./web/$1 [L]

И отредактируйте web/.htaccess, раскомментировав строку «RewriteBase/».

это делает все mysite.com/aaaa/bbbb работающими как mysite.com/web/aaaa/bbbb

person x2l2    schedule 13.10.2010

Краткий ответ: нет.

Немного дольше: вам придется отредактировать конфигурацию apache, по крайней мере, чтобы дать ему разрешение на доступ к каталогу web/, поэтому, даже если вы создадите символическую ссылку на свою веб-папку на /var/www, это не сработает.

person Maerlyn    schedule 22.05.2010
comment
Мой путь к веб-каталогу: /home/xx/public_html/web - person Ragnis; 23.05.2010
comment
Тогда почему бы не сделать /home/xx/public_html своим корневым каталогом? Поместите свой код в /home/xx и отредактируйте ProjectConfiguration, чтобы он вызывал $this->setWebDir? Если это сработает, я обновлю свой ответ. - person Maerlyn; 23.05.2010
comment
я поместил все свои файлы symfony в /home/xx/private_html/ и оставил только содержимое папки /web в /home/xx/public_html/, но теперь я не могу заставить его работать. Symfony все еще ищет свои файлы в папке /home/xx/public_html/. - person Ragnis; 23.05.2010
comment
Поместите их в свой класс ProjectConfiguration: $this->setWebDir("/home/xx/public_html/"); $this->setRootDir("/home/xx/private_html/"); Я использую что-то вроде этого, но мои файлы symfony находятся в /home/xx, а корневой каталог — /home/xx/public_html. - person Maerlyn; 24.05.2010
comment
Он по-прежнему пытается найти свои файлы из public_html. - person Ragnis; 24.05.2010

Это очень похоже на мой вопрос Symfony на виртуальном хосте (проблема с корнем документа).

Это мой .htaccess в корневом каталоге проекта:

RewriteEngine On
RewriteBase /       

RewriteCond %{REQUEST_URI} ^/images/  [OR]
RewriteCond %{REQUEST_URI} ^/js/      [OR]
RewriteCond %{REQUEST_URI} ^/css/
RewriteRule ^(.*)$ /web/$1 [L]

RewriteCond %{REQUEST_URI} !^/web/
RewriteRule ^(.*)$ /web/index.php [QSA,L]

Это решило мою проблему, но symfony пытается сгенерировать каждый URL-адрес (например, используя url_for) из корня документа, поэтому вместо URL-адреса, такого как domain.com/my-article, он генерирует domain.com/web/my-article.
Мне пришлось немного изменить мой класс PatternRouting, чтобы обрезать префикс /web из каждого URL-адреса. . Я думаю, что это не лучшее решение, но оно работает.

Кроме того, если я хочу получить доступ к серверному приложению, мне нужно всегда вызывать /web/backend.php/, потому что я не хочу иметь так много правил перезаписи в файле .htaccess.

Если вы хотите увидеть мой расширенный исходный код класса PatternRouting, я вставлю его сюда.

person martin    schedule 23.05.2010

Да, это возможно. Скопируйте все из web/ на уровень выше в корень вашего документа. Отредактируйте index.php, чтобы отразить тот факт, что все, что он включает, теперь на один уровень ближе к текущему каталогу, чем раньше (на один меньше ../). Вам не придется редактировать ни один другой файл Symfony.

person Dan Grossman    schedule 12.12.2010