2015-01-17 2 views
1

В моем symfony я переместил /MySymfonyFolder/web/app.php, чтобы root и переименовал его в index.php, например. /MySymfonyFolder/index.php, я изменил htaccess, как показано ниже, но он вызывает проблему для поиска изображений css через cssrewrite, поскольку я написал here.как перемещать symfony /web/app.php в /root/app.php

1) Я не хочу перемещать/MySymfonyFolder/web/bundles /,/MySymfonyFolder/web/images/and/MySymfonyFolder/web/css to/MySymfonyFolder/тоже. 2) Я не хочу перемещать/app/и/src/на верхнем уровне за пределами корня symfony.

Предполагая, что я хочу все /index.php (symfony app.php),/app/and/src/в подпапке, как htaccess должен распознавать как /MySymfonyFolder/index.php, так и/MySymfonyFolder/web/что он тоже может найти изображения?

Вот мой неправильный .htaccess, который вызывает проблему с изображением css. исправьте. Я искал stackoverflow и ничего не нашел по этому поводу.

<IfModule mod_rewrite.c> 
    RewriteEngine On 

    RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$ 
    RewriteRule ^(.*) - [E=BASE:%1] 

    RewriteCond %{HTTP:Authorization} . 
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

    RewriteCond %{ENV:REDIRECT_STATUS} ^$ 
    RewriteRule ^index\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L] 

    RewriteCond %{REQUEST_FILENAME} -f 
    RewriteRule .? - [L] 

    RewriteRule .? %{ENV:BASE}/index.php [L] 
</IfModule> 

<IfModule !mod_rewrite.c> 
    <IfModule mod_alias.c> 
     RedirectMatch 302 ^/$ /index.php/ 
    </IfModule> 
</IfModule> 
+0

вы перемещаете точку входа и, следовательно, базовый url приложения, поэтому вы, вероятно, испортите любые относительные пути, например '/ bundles/mybundles/css/main.css' теперь может понадобиться ссылка на'/web/пучки/mybundles/CSS/main.css'. В настоящий момент у меня нет Symfony, чтобы проверить его дважды, но похоже, что вы меняете корень документа, который нарушает относительные ссылки. – Scriptable

+0

Можно ли все решить с помощью htaccess в/MySymfonyFolder/root? – user4271704

+0

, вы можете переписать любые запросы на/bundles/to/web/bundles.Существует причина, по которой команда symfony структурировала структуру таким образом, и если корень документа является уровнем выше, вы создаете угрозу безопасности. Если вы можете объяснить, ПОЧЕМУ вы это делаете, тогда мы сможем предложить лучшее решение. – Scriptable

ответ

3

Вы должны посмотреть на documentation!

Если вам нужно переименовать или переместить свой веб-каталог, единственное, что вам нужно гарантировать, это то, что путь к каталогу приложений по-прежнему правилен в ваших передних контроллерах app.php и app_dev.php. Если вы просто переименовали каталог, вы в порядке. Но если вы переместили его в какой-то мере, возможно, потребуется изменить пути внутри этих файлов:

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

Кроме того, необходимо изменить extra.symfony-веб-Dir параметр в файле composer.json:

{ 
    ... 
    "extra": { 
     ... 
     "symfony-web-dir": "." 
    } 
} 
+0

На самом деле я сделал это, и он работал, но у меня была проблема с активами, как я сказал здесь http://stackoverflow.com/questions/27993233/how-to-have-background-image-in-symfony-assets/27999621, что еще нужно Я делаю? – user4271704

+0

Пожалуйста, прочитайте комментарий выше. Я думаю, что моя проблема, описанная в этом вопросе, была из-за read_from в assetic config, как здесь: http://symfony.com/doc/current/cookbook/configuration/override_dir_structure.html#override-the-web-directory правильно? – user4271704

+0

Работает ли он с правильным read_from? –

1

Try:

RewriteEngine on 
RewriteBase/
RewriteRule ^css/(.*) web/css/$1 
RewriteRule ^images/(.*) web/images/$1 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ app.php [QSA,L] 

ИЛИ

RewriteEngine on 
RewriteBase/
RewriteRule ^bundles/(.*) web/bundles/$1 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ app.php [QSA,L] 

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

Вы также должны изучить обновление .htaccess, чтобы предотвратить прямой доступ к другим файлам приложений, которые не находятся в веб-папке, Symfony делает их недоступными по какой-либо причине. Использование корневой папки, поскольку ваш DocumentRoot не рекомендуется.

+0

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

+0

Я повторно установил этот ответ, так как точка зрения на риски безопасности, связанные с этим образом, действительна, как и смысл использования .htaccess для предотвращения доступа к другим папкам. Правила перезаписи не были перепутаны. Единственная причина, перечисленная в правилах переписывания, заключалась в том, чтобы исправить правила, используемые ОП в его вопросе. – Scriptable

+0

@Pazi ツ Я думаю, что это был его смысл, он предлагает сохранить «путь symfony», то есть маршрут приложения через веб-папку –

0

Мое правило: если вы используете Symfony2, это, вероятно, будет слишком большим для общего хостинга. Вам нужно будет контролировать ваш сервер, особенно устанавливая корни документов и т. Д.

Рассмотрите возможность использования чего-то типа Linode или Digital Ocean. Или пересмотреть, нужна ли вам инфраструктура как полный стек, как Symfony2. Я считаю, что Laravel хорошо работает на общем хостинге.

Смежные вопросы