Статьи

Перетащите папку в каталог и сделайте ее автоматически превращенной в Apache vhost

Одна вещь, которую я хотел реализовать некоторое время назад, — это автоматические 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>
    

Все сделано

Вот и все. Теперь вы можете создавать столько проектов, сколько захотите, не беспокоясь о настройке новых виртуальных хостов или изменении файла вашего хоста!