使用 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 设置放在这里,现在可以正常工作了。
我使用 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 设置放在这里,现在可以正常工作了。