假设我有一个本地的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 服务是不可能的,但到目前为止还没有必要。