2013-08-24 29 views
4

我一直在努力在我的服務器上運行apache_request_headers()。我已升級到PHP 5.4的最新版本,並將我的PHP處理程序更改爲FastCGI,因爲這樣可以運行apache_request_headers()函數。由於權限問題,我寧願不將PHP作爲apache模塊運行。授權標題和apache_request_headers函數

一切工作正常,我的新設置,但唯一的問題是,apache_request_headers()似乎沒有拿起我需要我的OAuth 2服務器的「授權」標題。

我送標題是:

Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

但是,如果我把下面的頭(或大於 '授權' 其他任何東西),它的工作原理:

X-Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 

令人沮喪...任何想法,我如何才能得到這個工作?

+0

你在使用什麼操作系統?我使用的是Ubuntu 12.04和PHP 5.5.5-1 + debphp.org〜precise + 2(cli),但是當我測試「apache_request_headers」的存在時,我返回了bool(false)。 – Sergio

+0

看到我的答案在下面:)工作了。 –

+0

我認爲這是因爲我正在使用mod_fastcgi w/php-fpm。這似乎是衆所周知的,使用該設置時,該功能不存在。我還需要獲得Access-Control-Allow-Origin和其他頭文件,但沒有這種運氣。恐怕我不需要「授權」。 – Sergio

回答

11

經過一些挖掘後,我發現以下內容。如果不使用FastCGI PHP處理程序或不將PHP作爲apache模塊運行,它將完全不需要apache_request_headers()。

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 
</IfModule> 

在一個單獨的說明,另一頭我需要爲內容類型,我只能夠在apache_request_headers得到()函數。可能有人會有所幫助:)

RewriteRule .* - [E=HTTP_CONTENT_TYPE:%{HTTP:Content-Type}] 
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

希望這會有所幫助。