APACHE SetEnv 指令(来自 .htaccess)未发送到 CGI 进程

APACHE SetEnv 指令(来自 .htaccess)未发送到 CGI 进程

我不明白这种情况下 Apache2 的机制:

1/ 在此位置:var/www/cgi-bin/(用户组权限:www-数据)我有一个 CGI 脚本(php-cgi),它将执行 PHP 应用程序+VAR 环境版本:

#!/bin/bash
# file : var/www/cgi-bin/cgi-php
exec "/usr/bin/php-cgi$PHP_VERSION"

该脚本已:chmod a+x由用户 www-data(Apache 服务器)在运行时执行

所有 PHP 版本位于:

/usr/bin/php-cgi5.6

/usr/bin/php-cgi7.0

/usr/bin/php-cgi7.1

/usr/bin/php-cgi7.2

所有版本均运行良好。

2/ 在 Apache Server .conf 文件中,我使用:

<Directory "/var/www/cgi-bin">
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Require all granted
    AllowOverride All
</Directory>

SetEnv PHP_VERSION 7.1
ScriptAlias /cgi-bin-php/ /var/www/cgi-bin/
Action php-cgi /cgi-bin-php/php-cgi
AddHandler php-cgi .php

当 Apache2 重新启动时,我可以在 http 中看到:PHP 版本7.1已加载(工作正常)。

3 / 如果我在 .htaccess 文件中放置另一个 PHP_VERSION 变量,它不会被发送吗?

文件:/var/www/html/.htaccess

SetEnv PHP_VERSION 5.6

在这种情况下,.htaccess 文件什么也不做。在 http 中我可以看到:PHP 版本 7.1

问题:为什么设置环境变量 PHP_VERSION XX在运行时正在工作(当我启动 Apache2 时)。

为什么我不能设置一个新变量(设置环境变量 PHP_VERSION XX) 来自 .htaccess 文件?我认为 Apache 不会将 $PHP_VERSION 变量发送到 shell 环境 (Ubuntu Server 16.04)。

如果有人能帮助我...非常感谢。

来源 :https://www.codejam.info/2014/08/apache-get-php-version-from-environment.html

答案1

我按照您提供的源链接中概述的步骤操作,经过一些小修改后,它就可以正常工作。首先,您需要确保将该.htaccess文件放入的目录已配置好,以便AllowOverride它能够正常工作,否则它只会默默失败。

其次,由于您正在将 PHP 作为 CGI 运行,如果您要删除 phpinfo 页面并检查正在设置的变量,您就会发现问题。假设您的文件已成功设置您的变量.htaccess,它将以修改后的方式传递:

_SERVER["REDIRECT_PHP_VERSION"] 

如果你只是修改/var/www/cgi-bin/cgi-php文件来查找REDIRECT_PHP_VERSION变量(如exec "/usr/bin/php-cgi$REDIRECT_PHP_VERSION"),那么这可能会起作用。或者(根据此来源),如果您使用 fastcgi,则不必担心变量名称会发生​​变化。如果这些都不起作用,那么我会从 phpinfo 页面开始,查看传递了哪些变量(如果有的话),然后从那里开始。

编辑:只是注意到我的测试环境是在 CentOS 7 服务器上全新安装的 httpd,并使用 PHP 的 SCL 版本,并相应地修改路径。

相关内容