我一直在让apache_request_headers()在我的服务器上工作。我已升级到最新的PHP 5.4稳定版并将我的PHP处理程序更改为FastCGI,因为这允许您运行apache_request_headers()函数。由于权限问题,我宁愿不将PHP作为apache模块运行。
我的新设置一切正常,但唯一的问题是apache_request_headers()似乎没有选择我的OAuth 2服务器所需的“授权”标题。
我发送的标题是:
Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
但是,如果我发送以下标题(或“授权”以外的任何标题),它的作用是:
X-Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
令人沮丧......关于我如何才能实现这一目标的任何想法?
答案 0 :(得分:12)
经过多次挖掘后,我发现了以下情况。如果你没有使用FastCGI PHP处理程序或者没有将PHP作为apache模块运行,它就完全不需要apache_request_headers()。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
另外,我需要的另一个标题是Content-Type,我只能在apache_request_headers()函数中获取。可能对某人有帮助:))
RewriteRule .* - [E=HTTP_CONTENT_TYPE:%{HTTP:Content-Type}]
答案 1 :(得分:0)
此外,当使用PHP与快速CGI和FPM时,以下是诀窍:
<VirtualHost *:80>
... # other configuration
FastCgiExternalServer {other parameters} -pass-header Authorization
... # further configuration
</VirtualHost>
它消除了重写规则的需要。
当RewriteRule解决方案不起作用时,我发现我的解决方案正常工作:
它可能来自我在haproxy后面使用的apache,但Authorization标题以某种方式“重命名”(由谁/什么?)REDIRECT_HTTP_AUTHORIZATION
而不是HTTP_AUTHORIZATION
。
希望这有帮助。