apache 临时 VirtualHost 通过脚本启动



假设我有一个本地的apache2,我需要了一个脚本来运行apache2,并带有一个特殊的注入的VirtualHost。

更多前提:
我在Windows 10上有一个xampp安装(PHP 7.3.10,MariaDB 10.4.8,mysqlnd 5.0.12-dev,Apache 2.4.41(。
几个PHP项目遍布整个硬盘。到目前为止,我在每个项目切换上启动 apache2 服务之前修改了./apache/conf/extra/httpd-vhosts.conf文件。有了它,我可以将项目文件夹留在原地,而无需将它们复制到 xampp 安装文件夹中。

现在我很好奇我是否可以为每个项目(bat 或 sh,安装了 GitShell(编写一个脚本,该脚本将正常运行 mariadb 和 apache2,并为该特定项目文件夹提供临时 VirtualHost 作为 DocumentRoot。

我目前可以做的:
在项目文件夹中放置一个httpd-vhosts.conf文件和一个startProject.sh脚本。运行脚本将复制 xampp 安装中的配置文件,然后启动 apache2 服务。
这是有效的,但只有一个 apache2 进程可以启动,而不是一次启动多个项目。

我想要的:
我想使用一个参数,在启动 apache2 时按参数指定虚拟主机。
也许通过说 apache2 使用特殊的配置文件而不是自己的项目结构中的文件。
或者我想通过启动 apache2 进程来使用一个参数,该进程为已指定的虚拟主机指定备用文档根文件夹。

目前这是我的方法:

#!binbash
BASEDIR=$(dirname "$0")
xamppPath="C:xamppv7.3.10"
cd $xamppPath
"apachebinhttpd.exe" -S "$BASEDIRhttpd-vhosts.conf" &

-S只打印出虚拟主机,而不设置配置文件。

如何在不覆盖 xampp 安装文件夹中的现有配置文件的情况下,使用硬盘驱动器上的某个位置运行带有脚本的项目?

更简单:构建几个祝贺文件,使用选项-f指定有效的配置文件,而不是-S

可能更复杂:用户-D name并使用配置文件中的<IfDefine name>来"选择"其中的部分以应用于特定启动。

注意:我使用apachectl,而不是直接httpd来启动/停止 Apache。

在 xampp 包中没有直接的apachectl文件,因此我无法使用-D <name>。这将是完美的解决方案,但不幸的是不可能。

现在,我必须覆盖要启动的每个项目中的httpd-vhosts.conf文件。因此,我正在使用修改后的脚本解决方案:

#!binbash
BASEDIR=$(dirname "$0")
xamppPath="C:xamppv7.3.10"
cp -f "$BASEDIRhttpd-vhosts.conf" "$xamppPathapacheconfextrahttpd-vhosts.conf"
sleep 1
cd $xamppPath
"apachebinhttpd.exe" &

这不是完美的解决方案,但它有效。
两个不同的项目同时提供两个 apache 服务是不可能的,但到目前为止还没有必要。

最新更新