使用 fopen('php://stdin', 'r') 的 Apache RewriteMap prg 无法通过 HTTPS 工作

Apache RewriteMap prg using fopen('php://stdin', 'r') not working over HTTPS

我使用 prg 设置了一个 RewriteMap,它调用 php 脚本,如下所示:

 #!/usr/local/bin/php
<?php

/* DB query generates $map */

$stdout = fopen('php://stdout', 'w');
$stdin  = fopen('php://stdin', 'r');
            
stream_set_write_buffer($stdout, 0);
            
while(!feof($stdin)):
                
    $input  = fgets($stdin);
            
    fputs($stdout, (array_key_exists($input,$map) ? $map[$input] : 'NULL') . "\n");
                
endwhile;
?>

然后 .htaccess 将输出放入环境变量 MAPTO 中,如下所示:

<IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
  RewriteRule ^ - [E=MAPTO:${mymap:%1}]
  RewriteCond %{ENV:MAPTO} !=""
  RewriteRule ^.*$ http://myproxiedcontent.com/%{ENV:MAPTO}/[=13=] [P,NC]
</IfModule>

它在 HTTP 上正常工作,但在 HTTPS 上没有返回任何输入。

我正在使用 Apache 2.4、PHP 7.2 并已确认安装了 OpenSSL。

这里可能发生了什么?

好吧,我想我明白了。我认为这个问题主要与以下事实有关:我正在使用 WHM,它以极其复杂的方式处理 Apache 配置。

我不得不在 httpd.conf 文件中搜索我的 vhost 配置设置。在这些设置的底部 - 配置 SSL 的地方 - 是一条注释,表明与此虚拟主机相关的设置应添加到:

/etc/apache2/conf.d/userdata/ssl/2_4/{USERNAME}/{DOMAIN}.{TLD}

我将我的 RewriteMap 设置放在这里,现在可以正常工作了。