Windows下Apache多虚拟主机配置不同PHP版本的正确语法
Windows 10下Apache 2.4多虚拟主机配置不同PHP版本
核心注意事项
Apache无法同时加载两个PHP的Apache SAPI模块(如php7apache2_4.dll和php8apache2_4.dll),因此默认加载PHP 8.1的模块,对需要PHP 7.4的虚拟主机采用CGI模式调用对应版本的PHP解释器。
完整配置代码
# 仅加载PHP 8.1的Apache模块,注释掉PHP7.4的模块加载 #LoadModule php7_module "C:/amp/php74/php7apache2_4.dll" LoadModule php_module "C:/amp/php8/php8apache2_4.dll" # 全局默认PHP 8.1的配置 <IfModule php_module> AddType application/x-httpd-php .php DirectoryIndex index.php index.html PHPIniDir "C:/amp/php8" </IfModule> # 本地默认主机 <VirtualHost *:80> ServerName localhost DocumentRoot "D:/wwwroot" <Directory "D:/wwwroot"> Require all granted AllowOverride All </Directory> </VirtualHost> # 使用PHP 8.1的虚拟主机domain1.localhost <VirtualHost *:80> ServerName domain1.localhost DocumentRoot "D:/wwwroot/domain1/web" ErrorLog "logs/domain1-error.log" <Directory "D:/wwwroot/domain1/web"> Require all granted AllowOverride All </Directory> </VirtualHost> # 使用PHP 7.4的虚拟主机domain2.localhost <VirtualHost *:80> ServerName domain2.localhost DocumentRoot "D:/wwwroot/domain2" ErrorLog "logs/domain2-error.log" <Directory "D:/wwwroot/domain2"> Require all granted AllowOverride All </Directory> # 为当前虚拟主机配置PHP 7.4的CGI处理 <FilesMatch \.php$> # 自定义处理器名称,避免与全局PHP8.1冲突 SetHandler application/x-httpd-php74 # 指向CGI映射路径 Action application/x-httpd-php74 "/php74-cgi" </FilesMatch> </VirtualHost> # PHP7.4的CGI映射配置(必须放在虚拟主机外部) ScriptAlias /php74-cgi "C:/amp/php74/php-cgi.exe" <Directory "C:/amp/php74"> Require all granted </Directory>
关键配置说明
- CGI映射:
ScriptAlias用于将请求路径映射到PHP7.4的php-cgi.exe,需放在所有虚拟主机之外,同时要给PHP7.4目录配置访问权限。 - 处理器隔离:在domain2中使用自定义的
application/x-httpd-php74处理器,避免和全局默认的PHP8.1处理器冲突,确保当前虚拟主机的PHP文件走CGI模式调用7.4版本。 - PHP.ini配置:确保PHP7.4目录下的
php.ini设置了正确的extension_dir、doc_root等参数,可复制一份默认配置文件单独修改。
验证方法
- 重启Apache服务,确认无启动报错。
- 在两个虚拟主机根目录分别创建
phpinfo.php,内容为<?php phpinfo(); ?>。 - 访问
domain1.localhost/phpinfo.php确认版本为8.1,domain2.localhost/phpinfo.php确认版本为7.4。
内容的提问来源于stack exchange,提问作者Lissy
相关产品推荐
相关产品推荐

