【发布时间】:2018-10-08 21:30:07
【问题描述】:
有没有办法根据目录是否存在在 Apache 中包含配置设置?基本上,我有一个便携式硬盘驱动器,可以在工作和家庭之间运输,上面有一些我正在开发的东西。如果文件夹存在,我只希望 Apache 配置加载特定的虚拟主机。
【问题讨论】:
有没有办法根据目录是否存在在 Apache 中包含配置设置?基本上,我有一个便携式硬盘驱动器,可以在工作和家庭之间运输,上面有一些我正在开发的东西。如果文件夹存在,我只希望 Apache 配置加载特定的虚拟主机。
【问题讨论】:
从 Apache 2.4.34 开始,您现在可以使用 <IfFile>...</IfFile> 来检查文件是否存在。 <IfFile> 页面上有更多详细信息。
【讨论】:
不,似乎没有直接的方法可以做到这一点。
可能的唯一解决方案是IfDefine 指令。您可以使用-d 参数定义定义到何时启动服务器。
parameter-name 参数是在服务器启动时在 httpd 命令行上通过
-Dparameter-给出的定义。
您可以检查批处理或 bash 文件中是否存在目录,并相应地设置 -d 参数。
这是否是一个选项,将取决于您的服务器是如何从便携式硬盘启动的。
【讨论】:
我提出了一个似乎适用于 Linux 和 OS X 的解决方案,它取决于“挂载点”。也可以在 Windows 中模拟它,但您可能必须使用 FUSE 和/或 Cygwin 发挥创意。
如果您在主目录中创建一个空文件夹,例如“/Users/username/ExtraVhosts”,则可以在“Include /Users/username/ExtraVhosts/*”中添加 apache 指令。
然后,当您插入拇指驱动器时,您可以在某处挂载,然后使用挂载点“绑定”将 ExtraVhosts 文件夹交叉链接到移动设备上的文件夹。
一个 OS X 示例:
此时,只需在 /etc/hosts 中添加条目以获取服务器别名即可。
Linux 等价物将使用 mount 命令的“--bind”参数。
一个警告:这使得快速卸载 USB 驱动器变得困难,因为它总是被 apache 标记为“正在使用”。这是一个删除过程:
然后您可以以图形方式或手动卸载它(umount /Volumes/Cherrybomb)。
如果您的工作和家庭计算机将驱动器安装到不同的位置,您可以有多个 vhosts 文件夹 - home_vhost、work_vhost 等 - 并在绑定步骤中使用它们。
我希望这可以帮助某人:)
【讨论】:
如果您仅将 apache 指向挂载点,则应该没有问题。只是不要将目录指令指向驱动器内的目录。
例如,如果您挂载 /dev/somedisk /mnt/somevhost,则
/mnt/somevhost 目录将在那里,无论您是否安装了驱动器并且 apache 将启动。 Apache 不关心目录是否为空,因此如果驱动器未挂载,<Directory "/mnt/somevhost"/> 不会导致服务器无法启动。
与 UNIX 一起工作而不是反对它:-p 这个解决方案应该足以用于开发。
【讨论】: