Есть ли способ проверить, существует ли каталог в файлах конфигурации Apache? - PullRequest
10 голосов
/ 13 сентября 2010

Есть ли способ включить параметры конфигурации в Apache, основываясь на том, существует ли каталог? По сути, у меня есть портативный жесткий диск, который я транспортирую между работой и домом, на котором есть кое-что, что я разрабатываю. Я только хочу, чтобы конфигурация Apache загружала конкретный виртуальный хост, если папка существует.

Ответы [ 4 ]

4 голосов
/ 15 марта 2012

Я пришел к решению, которое, кажется, работает для Linux и OS X, и оно зависит от «точек монтирования». Возможно, можно будет эмулировать его и в Windows, но вам, вероятно, придется проявить изобретательность с помощью FUSE и / или Cygwin.

Если вы создаете пустую папку в своем домашнем каталоге, например, «/ Users / username / ExtraVhosts», вы можете добавить директиву apache в «Include /Users/username/ExtraVhosts/*".

».

Затем, когда вы вставляете свой флэш-накопитель, вы можете смонтировать его где-нибудь, а затем использовать «привязку» точки монтирования для сшивки папки ExtraVhosts с папкой на мобильном устройстве.

Пример OS X:

  • У меня есть флешка под названием "Cherrybomb"
  • Когда я вставляю его, он всегда монтируется в / Volumes / Cherrybomb
  • Затем я могу использовать bindfs (sudo port install bindfs) для монтирования его подпапки, например так:
    • sudo bindfs / Тома / Cherrybomb / Проекты / vhosts / Пользователи / имя пользователя / ExtraVhosts
  • Затем я могу перезапустить apache, чтобы прочитать в обновленной конфигурации:
    • sudo / opt / local / apache2 / bin / apachectl restart

На этом этапе нужно просто добавить записи в / etc / hosts для получения псевдонимов сервера.

В Linux-эквиваленте будет использоваться параметр --bind команды mount.

Одно предостережение: Это затрудняет быстрое отключение USB-накопителя, так как он всегда помечается как «используемый» apache. Вот процедура удаления:

  • Закройте все открытые файлы и сеансы терминала, которые используют диск (текущий рабочий каталог в терминале может вызвать проблемы с размонтированием)
  • Остановить apache: sudo / opt / local / apache2 / bin / apachectl stop
  • umount / Пользователи / имя пользователя / ExtraVhosts

Затем вы можете размонтировать его графически или вручную (umount /Volumes/Cherrybomb).

Если ваша рабочая и домашняя машины монтируют диск в разных местах, вы можете иметь несколько папок vhosts - home_vhost, work_vhost и т. Д. - и использовать их на этапе привязки.

Надеюсь, это кому-нибудь поможет:)

4 голосов
/ 13 сентября 2010

Нет, кажется, нет прямого способа сделать это.

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

Аргумент имя-параметра является определением, заданным в командной строке httpd через -Dparameter-, во времясервер был запущен.

Возможно, вы сможете проверить наличие каталога в пакетном или bash-файле и соответственно установить параметр -d.

Является ли этовариант, будет зависеть от того, как ваш сервер запускается с портативного жесткого диска.

1 голос
/ 08 октября 2018

Начиная с Apache 2.4.34, теперь вы можете использовать <IfFile>...</IfFile>, который проверит, существует ли файл. Подробнее на странице <IfFile>.

0 голосов
/ 25 декабря 2014

Если вы указываете apache только на точку монтирования, проблем быть не должно. Только не указывайте директивные директории на каталоги на диске.

Например, если вы смонтируете / dev / somedisk / mnt / somevhost, Каталог / mnt / somevhost будет там, независимо от того, установлен ли у вас диск и запустится apache. Apache не заботится, если каталог пуст, поэтому <Directory "/mnt/somevhost"/> не приведет к тому, что сервер не запустится, если диск не подключен.

Работа с UNIX не против :-p Это решение должно быть достаточным для разработки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...