Одна вещь, которую я хотел реализовать некоторое время назад, — это автоматические vhosts на моем компьютере разработчика. Идея заключается в том, что я хочу поместить папку в каталог и автоматически превратить ее в vhost для меня, доступной по адресу http: // foldername .dev . Оказывается, это не так сложно, как ожидалось, как это обычно бывает с вещами, которые я откладывал!
Вот как это сделать.
Конфигурация Apache
Волшебство Apache находится в расширении под названием mod_vhost_alias, которое вам может потребоваться включить в файле httpd.conf.
Затем вы можете настроить VirtualHost, где бы вы ни находились. На стандартной OS X используется файл extras / httpd-vhosts.conf.
Добавьте следующее внизу:
<VirtualHost *:80> VirtualDocumentRoot "/www/dev/%1/public" ServerName vhosts.dev ServerAlias *.dev UseCanonicalName Off LogFormat "%V %h %l %u %t \"%r\" %s %b" vcommon ErrorLog "/www/dev/vhosts-error_log" <Directory "/www/dev/*"> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost>
В конфигурации VirtualHost я использовал директивы ServerAlias и VirtualDocumentRoot для отображения http: // foldername .dev в каталог / www / dev / foldername / public. Следовательно, любая папка, которую я помещаю в / www / dev, будет иметь свой собственный виртуальный хост. Измените их соответствующим образом для вашей установки.
Не забудьте перезапустить Apache.
К сожалению, компьютер не знает, как обращаться с http://foldername.dev, и очевидным решением является запуск локального DNS-сервера. Другое решение — использовать файл PAC.
Конфигурация DNS-сервера
Это достаточно просто с dnsmasq . На OS X используйте Homebrew для установки следующим образом: brew install dnsmasq. В Linux используйте свой менеджер пакетов; в Windows вы сами!
Обратите внимание, что в OS X вы должны настроить его автоматический запуск с помощью launchd, как указано в инструкциях после установки. Вам также необходимо скопировать файл конфигурации в / etc, используя: cp /usr/local/Cellar/dnsmasq/2.57/dnsmasq.conf.example /usr/local/etc/dnsmasq.conf (или любой другой номер последней версии). в Linux я бы предположил, что ваш менеджер пакетов предоставляет файл dnsmasq.conf в / etc или / etc / dnsmasq.
Затем отредактируйте файл dnsmasq.conf и добавьте следующие строки внизу:
listen-address=127.0.0.1 address=/.dev/127.0.0.1
Добавьте сервер имен в конфигурацию вашей сети
В OS X перейдите в Системные настройки -> Сеть -> {Wifi или Ethernet} -> Дополнительно … -> DNS и нажмите кнопку + в нижней части левой панели и добавьте 127.0.0.1 в список DNS-серверов. Перетащите 127.0.0.1 вверх по списку.
В Linux вам нужно отредактировать /etc/resolv.conf и добавить в файл сервер имен 127.0.0.1. Кроме того, вы можете использовать соответствующие инструменты GUI …
Перезапустите dnsmasq, и теперь вы сможете запустить host test.dev в командной строке и увидеть 127.0.0.1 в качестве результирующего адреса.
Альтернатива DNS-серверу: файл PAC
После публикации этой статьи Крис Морелл отметил, что вы также можете использовать файлы PAC вместо установки DNS-сервера. Подробности в его блоге .
Проверьте это работает
Создайте каталог с именем test в вашем каталоге dev. В рамках теста создайте public / index.php и в index.php добавьте код, чтобы доказать, что он работает. например, <? php echo «Hello World»; ?>
Если вы перейдете на http://test.dev, вы должны увидеть «Hello World».
Предостережения
Несколько предостережений:
- DOCUMENT_ROOT — это не / www / dev / test, как вы ожидаете. Вместо этого это глобальный корень документа.
- Если вы используете mod_rewrite, то вам понадобится RewriteBase / в вашем файле .htaccess. Кроме того, вы можете изменить раздел <Directory> вашего vhost, чтобы переписать его, если все ваши проекты похожи. Примерно так должно работать:
<Directory "/www/dev/*"> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny Allow from all RewriteEngine On RewriteBase / RewriteCond %{REQUEST_FILENAME} -s [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ index.php [NC,L] </Directory>
Все сделано
Вот и все. Теперь вы можете создавать столько проектов, сколько захотите, не беспокоясь о настройке новых виртуальных хостов или изменении файла вашего хоста!