php - Apache RewriteMap prg 使用 fopen('php://stdin', 'r') 不能通过 HTTPS 工作
问题描述
我已经设置了一个 RewriteMap 使用prg
它调用一个 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}/$0 [P,NC]
</IfModule>
它在 HTTP 上正常工作,但在 HTTPS 上不返回任何输入。
我正在使用 Apache 2.4、PHP 7.2 并确认已安装 OpenSSL。
这里会发生什么?
解决方案
好吧,我相信我想通了。我认为这个问题主要与我使用 WHM的事实有关,它以极其复杂的方式处理 Apache 配置。
我必须在 httpd.conf 文件中搜索我的虚拟主机配置设置。在这些设置的底部 - 正在配置 SSL - 是一个注释,表明与此虚拟主机相关的设置应添加到:
/etc/apache2/conf.d/userdata/ssl/2_4/{USERNAME}/{DOMAIN}.{TLD}
我将我的 RewriteMap 设置放在这里,现在它正在工作。
推荐阅读
- css - 如何在一个之后显示元素
,在屏幕内? - php - Laravel:如何从 API 获取 json 响应
- r - 在R中将浮点数转换为字符串而不会丢失精度
- angular - Stackblitz:如何使用 Angular 执行测试?
- uwp-xaml - XAML 错误但不是
- active-directory - LDAP 无效凭据 - Active Directory Windows Server 2012 R2
- r - 通过另一个数据帧的两列中的值对两个数据帧中的数据帧进行子集
- matrix - Xcode simd - 平移和旋转矩阵示例的问题
- javascript - d3js v5 + topojson v3 在后台访问对象的属性
- cassandra - 如何在 Cassandra 中设计一个包含事件日期和四列过滤的表格