如何从 htaccess 为多个 PHP 版本配置 Apache

Posted

技术标签:

【中文标题】如何从 htaccess 为多个 PHP 版本配置 Apache【英文标题】:How to configure Apache for Multiple PHP version from htaccess 【发布时间】:2017-02-24 12:16:49 【问题描述】:

我已经从 Remi Repositories 安装了一组 php 版本,对于问题本身可能会被忽略,但为了理解我尝试过的处理而保留。

它们在命令行中运行良好,但我想将它们与 Apache 2(Fedora 24 上的 httpd)一起使用,运行多个虚拟主机,如下所示:

php54.test
php55.test
php56.test
php70.test
php71.test

我已经创建了 VirtualHost conf 文件,每个文件都工作正常。

我想运行每个相应的 php 版本(根据提示的 ServerName),但我找不到如何从每个虚拟主机加载 PHP。 我找不到相应的 Remi libphpX.so 来将它们作为模块加载:

<VirtualHost *:80>
    ServerName php54.test
    DocumentRoot /var/www/php54

    #SOMETHING LIKE THIS... 
    LoadModule php??_module       modules/libphp??.so

</VirtualHost>

我有一个共享主机,这不是新闻,它允许我从 .htaccess 更改 PHP 版本,我可以执行以下操作:

AddHandler application/x-httpd-php54 .php
AddHandler application/x-httpd-php55 .php
AddHandler application/x-httpd-php56 .php
AddHandler application/x-httpd-php7 .php
AddHandler application/x-httpd-php71 .php

我现在可能看起来像个假人,但我怎样才能进行相同的 .htaccess 切换以提供多个 PHP 版本?

我可能不知道在 Google 上搜索什么以及如何搜索以找到最匹配的答案。

【问题讨论】:

【参考方案1】:

您不能使用多个版本的 mod_php。

更好的解决方案是使用 php-fpm(Fastcgi 进程管理器),在每个 vhost 中使用一个 SetHandler 到 fcgi 服务器:

    SetHandler "proxy:fcgi://127.0.0.1:9070"

或者(使用 unix 域套接字)

    SetHandler "proxy:unix:/var/opt/remi/php70/run/php-fpm/www.sock|fcgi://localhost"

本文对此进行了描述:My PHP workstation。

【讨论】:

@Remi Collet 在他的文章中提出的解决方案非常有效!

以上是关于如何从 htaccess 为多个 PHP 版本配置 Apache的主要内容,如果未能解决你的问题,请参考以下文章

PHP & .htaccess:为多个目录添加文件

如何使用 .htaccess 指向目录以加载索引

将多个 php 文件视为目录,htaccess

如何在服务器的htaccess中更改php版本

为多个参数和页面编辑 .htaccess

.htaccess是什么