我有一个PHP应用程序需要独立于包含的Apache服务器执行HTTP Basic身份验证。
在linux机器上,通过apt-get php
安装了php,我发现Authorization
标题没有显示在$_SERVER
中,但可以通过apache_request_headers()
或{{1 }}
在Windows开发机器上,使用Zend Server 6.1.0 / PHP 5.4,我无法通过上述任何方法从PHP内部获取getallheaders()
标头值。我怎样才能获得它的价值?
我无法确定它,但似乎Zend Server可能使用FCGI将Apache请求分派给PHP(例如,变量Authorization
出现在PHP_FCGI_MAX_REQUESTS
)中。
如果确实如此,它会解释我的问题,因为$_SERVER
故意在应用中加载mod_fcgid
标题,请参阅http://httpd.apache.org/mod_fcgid/mod/mod_fcgid.html#fcgidpassheader
我尝试添加
Authorization
到我的apache FcgidPassHeader Authorization
,但它抱怨说:
httpd.conf
同样,也许Zend正在使用Invalid command 'FcgidPassHeader', perhaps misspelled or defined by a module not included in the server configuration
?
根据此页面http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html#FastCgiConfig,我尝试将以下内容添加到我的apache mod_fastcgi
:
httpd.conf
再次,它只是抱怨:
FastCgiConfig -pass-header Authorization
答案 0 :(得分:16)
我发现我可以通过在Windows上的apache配置中添加以下内容来解决这个问题:
SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1
这会向HTTP_AUTHORIZATION
全局添加$_SERVER
密钥,就好像Apache已经传递Authorization
标头一样。