如何在 Windows 上为不同的虚拟主机配置不同 php 版本的 Apache 配置

问题描述 投票:0回答:1

我正在 Apache 2.4 / Windows 10 的 httpd.config 中测试不同的语法,以便为不同的虚拟主机提供不同的 php 版本。 Domain1 应运行 PHP 8.1,Domain2 应运行 PHP 7.4。 这是我的测试之一: 有时用线

LoadModule php7_module "C:/amp/php74/php7apache2_4.dll"

有时没有它。 我收到不同的错误。 此版本适用于域 1,但不适用于需要 7.4 的域 2。

#LoadModule php7_module "C:/amp/php74/php7apache2_4.dll"
LoadModule php_module "C:/amp/php8/php8apache2_4.dll"

<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>

<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>


<VirtualHost *:80> 
ServerName domain2.localhost
DocumentRoot "D:/wwwroot/domain2"
ErrorLog "logs/domain2-error.log"
<Directory "D:/wwwroot/domain2">
Require all granted
AllowOverride All
</Directory> 

    <FilesMatch \.php$>
        SetHandler application/x-httpd-php
        Action application/x-httpd-php "C:/amp/php74/php-cgi.exe"
    </FilesMatch>
</VirtualHost>

正确的语法是什么?

php windows apache virtualhost httpd.conf
1个回答
0
投票

mod_rewrite
与一个特定的 PHP 版本绑定,并且只能加载一个实例,因此无法同时拥有不同的 PHP 版本。如果更改
LoadModule
指令并重新启动 Apache(有第三方捆绑包可以编写此脚本),则可以在版本之间切换,或者您可以安装侦听不同 IP+端口组合的 Apache 的另一个副本。

另一种选择是并排安装不同的 SAPI 模块(或替换)

mod_php
,例如 mod_fcgid。为此:

  1. 根据需要下载任意数量的 PHP 版本并将它们安装在不同的目录中。

  2. 如果您还没有该模块,请获取该模块。 Apache Lounge 提供 Windows 二进制文件。

  3. 使用您认为合适的任何系统范围默认值加载模块:

    LoadModule fcgid_module C:/path/to/mod_fcgid.so
    FcgidInitialEnv PHPRC "C:/PHP74"
    FcgidWrapper "C:/PHP74/php-cgi.exe" .php
    
  4. 对于您想要不同 PHP 版本的每个虚拟主机,请将

    mod_php
    替换为
    mod_fcgid

    <VirtualHost *:443>
        ServerName legacy.example.com
        # ...
    
        Options +ExecCGI
        <FilesMatch \.php$>
            SetHandler fcgid-script
        </FilesMatch>
    </VirtualHost>
    

    如果你完全放弃了

    mod_php
    ,你也可以这样做:

    Options +ExecCGI
    <FilesMatch \.php$>
        AddHandler fcgid-script .php
    </FilesMatch>
    
  5. 如果您需要另一个 PHP 版本,请在所需的虚拟主机中设置不同的解释器:

    <VirtualHost *:443>
        ServerName latest.example.com
        # ...
    
        Options +ExecCGI
        <FilesMatch \.php$>
            SetHandler fcgid-script
        </FilesMatch>
        FcgidInitialEnv PHPRC "C:/PHP83"
        FcgidWrapper "C:/PHP83/php-cgi.exe" .php
    </VirtualHost>
    
  6. 如果您在

    .htaccess
    或其他 Apache 设置文件(
    php_flag
    php_value
    等)中设置 PHP 指令,则需要将它们迁移到
    .user.ini
    文件中(使用适当的语法) .

相对于其他解决方案的好处是您不需要切换,所有项目将同时使用它们需要的 PHP 版本。

注意:这是针对 Windows 编写的。在 Linux 上,您可能更喜欢 php-fpm

© www.soinside.com 2019 - 2024. All rights reserved.