2009-05-05 82 views
13

我试图在PHP中创建一个REST API,我想实现一个类似于亚马逊S3方法的认证方案。这涉及在请求中设置自定义的“授权”标头。

我原以为我可以通过$ _SERVER ['HTTP_AUTHORIZATION']访问头文件,但无法在var_dump($ _ SERVER)中找到它。 apache_request_headers()函数可以解决我的问题,但是我的主机将PHP实现为CGI,因此它不可用。

是否有另一种方式可以访问PHP中的完整请求标头?

回答

22

你需要做一些mod_rewrite魔法让你的头过去的CGI屏障,就像这样:

RewriteEngine on 
RewriteRule .? - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 

<?php 
    $auth = $_SERVER['HTTP_AUTHORIZATION']; 
?> 

请注意,如果你使用mod_rewrite用于其他目的,它可能最终会被$_SERVER['REDIRECT_HTTP_AUTHORIZATION']

+0

这就像一个魅力,谢谢你。 – vamin 2009-05-05 22:21:44

3

尝试

$_ENV['HTTP_AUTHORIZATION'] 

当使用代替Apache模块接口CGI接口,HTTP头应该作为环境变量。

相关问题