有没有办法检查Apache配置文件中是否存在目录?

时间:2010-09-12 21:22:56

标签: apache directory

根据目录是否存在,是否有办法在Apache中包含配置设置?基本上我有一个便携式硬盘驱动器,我在工作和家庭之间运输,有一些我正在开发的东西。我只希望Apache配置在文件夹存在的情况下加载特定的虚拟主机。

4 个答案:

答案 0 :(得分:4)

不,似乎没有直接的方法来做到这一点。

可能唯一的解决方案是IfDefine指令。您可以使用-d参数定义定义以启动服务器。

  

parameter-name参数是在服务器启动时通过-Dparameter-在httpd命令行中给出的定义。

您可以检查批处理或bash文件中是否存在目录,并相应地设置-d参数。

这是否是一个选项,将取决于您的服务器从便携式硬盘驱动器的启动方式。

答案 1 :(得分:4)

我提出了一个似乎适用于Linux和OS X的解决方案,它取决于“挂载点”。也可以在Windows中模拟它,但你可能必须通过FUSE和/或Cygwin获得创意。

如果在主目录中创建一个空文件夹,例如“/ Users / username / ExtraVhosts”,则可以向“Include / Users / username / ExtraVhosts /*”添加apache指令。

然后,当您插入拇指驱动器时,您可以在某处安装,然后使用mountpoint“binding”将ExtraVhosts文件夹交叉链接到移动设备上的文件夹。

OS X示例:

  • 我有一个名为'Cherrybomb'的拇指驱动器
  • 当我插入它时,它总是被挂载到/ Volumes / Cherrybomb
  • 然后我可以使用bindfs(sudo port install bindfs)来安装它的子文件夹,如下所示:
    • sudo bindfs / Volumes / Cherrybomb / Projects / vhosts / Users / username / ExtraVhosts
  • 然后我可以重新启动apache来读取更新的配置:
    • sudo / opt / local / apache2 / bin / apachectl restart

此时,只需在/ etc / hosts中添加服务器别名中的条目即可获取。

linux等价物将使用mount命令的“--bind”参数。

一个警告:这使得很难快速卸载USB驱动器,因为它始终被apache标记为“正在使用中”。这是一个删除程序:

  • 关闭所有使用该驱动器的打开文件和终端会话(终端中的当前工作目录可能导致卸载问题)
  • 停止apache:sudo / opt / local / apache2 / bin / apachectl stop
  • umount / Users / username / ExtraVhosts

然后你可以用图形或手动卸载它(umount / Volumes / Cherrybomb)。

如果你的工作和家用机器将驱动器安装到不同的位置,你可以有多个vhosts文件夹 - home_vhost,work_vhost等 - 并在绑定步骤中使用它。

我希望这可以帮助别人:)

答案 2 :(得分:1)

从Apache 2.4.34开始,您现在可以使用rebase来检查文件是否存在。 <IfFile>页上有更多详细信息。

答案 3 :(得分:-1)

如果您将apache指向mountpoint,则不应该存在问题。只是不要将Directory指令指向驱动器中的目录。

例如,如果你挂载/ dev / somedisk / mnt / somevhost,那么 / mnt / somevhost目录将在那里,无论你是否安装了驱动器,apache将启动。 Apache不关心目录是否为空,因此如果未安装驱动器,<Directory "/mnt/somevhost"/>将不会导致服务器无法启动。

使用 UNIX 使用UNIX而不是它:-p此解决方案应该足以进行开发。