4

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

令人沮丧......关于如何让这个工作的任何想法?

4

2 回答 2

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}]
于 2013-08-24T23:43:40.683 回答
0

此外,当使用带有 Fast CGI 和 FPM 的 php 时,以下方法可以解决问题:

<VirtualHost *:80>
    ... # other configuration
    FastCgiExternalServer {other parameters} -pass-header Authorization
    ... # further configuration
</VirtualHost>

它消除了重写规则的需要。当 RewriteRule 解决方案不起作用时,我发现我的解决方案可以工作:它可能来自我在 haproxy 后面使用的 apache,但 Authorization 标头以某种方式“重命名”(由谁/什么?)REDIRECT_HTTP_AUTHORIZATION而不是HTTP_AUTHORIZATION.

希望这可以帮助。

于 2015-03-20T18:10:38.667 回答