Я пытаюсь найти способ решить мою проблему, но я не нашел никакого решения. Я постараюсь объяснить, что могу.
Я разрабатываю свой сайт в локальной среде на сервере MAMP. Домашний URL-адрес: http://localhost:8888/mysite/web/app_dev.php
. Я хотел изменить его на http://site.dev
для режима dev (позже я буду использовать http://site.prod
для режима prod). Некоторые из вас спросят меня "почему?". Ответ заключается в том, что мы хотим, чтобы у других разработчиков и у меня был такой же URL-адрес, что и в моем производстве, например http://example.com
Итак, я посмотрел на сторону виртуальных хостов Apache и файл хоста на моем компьютере. Я изменил порт Apache на 80, а порт MySQL - на 3306 (по умолчанию Nginx - 80).
Вот файл httpd-vhosts.conf
:
NameVirtualHost *:80
<VirtualHost *:80>
DocumentRoot /Applications/MAMP/htdocs
ServerName localhost
</VirtualHost>
<VirtualHost *:80>
ServerName site.dev
ServerAlias www.site.dev
DocumentRoot /Applications/MAMP/htdocs/site/web
<Directory /Applications/MAMP/htdocs/site/web>
AllowOverride All
Order Allow,Deny
Allow from All
</Directory>
</VirtualHost>
Файл hosts
:
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
fe80::1%lo0 localhost
127.0.0.1 site.dev
Очевидно, я активирую vhosts в файле apache httpd.conf
:
# Virtual hosts
Include /Applications/MAMP/conf/apache/extra/httpd-vhosts.conf
Вот мой новый файл web/.htaccess
:
DirectoryIndex app_dev.php
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
<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 ^app\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^app_dev\.php(/(.*)|$) %{ENV:BASE}/$2 [R=301,L]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule .? - [L]
RewriteRule .? %{ENV:BASE}/app_dev.php [L]
</IfModule>
<IfModule !mod_rewrite.c>
<IfModule mod_alias.c>
RedirectMatch 302 ^/$ /app_dev.php/
</IfModule>
</IfModule>
Теперь, я продолжаю http://site.dev
, все работает отлично. Я делаю изменения в файле script.js
(например), затем обновляю домашнюю страницу. Ничего не изменилось... Я пытаюсь выполнить php app/console assetic:dump
, я php app/console assetic:dump
еще раз, и, чудо, все работает.
Итак, мой вопрос следующий: как я могу использовать свой виртуальный хост http://site.dev
БЕЗ необходимости выполнения функции assetic:dump
console.
спасибо
EDIT: я не нашел решения для своей проблемы, поэтому дам вам более подробную информацию: - Когда я перехожу на http://localhost/site/
, я вижу все каталоги и файлы корневого каталога. - Когда я перехожу на http://localhost/site/web/
, отображается весь веб-сайт, но есть недостающие изображения (неправильный путь в ветке или меньше файлов), и я должен выполнить assetic:dump
. - Когда я перехожу на http://localhost/site/web/app_dev.php
, все обновляется мгновенно...
php app/console assets:install web --symlink
Это должно символизировать ваши активы, поэтому вам не нужно повторно запускать команду активов каждый раз.
Кроме того, ознакомьтесь с http://symfony.com/blog/new-in-symfony-2-6-smarter-assets-install-command