授权头和apache_request_headers函数

时间:2013-08-24 23:08:11

标签: php http-headers

我一直在让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

令人沮丧......关于我如何才能实现这一目标的任何想法?

2 个答案:

答案 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

希望这有帮助。