昨天发现一个问题。添加了一个用php发出http auth的脚本,在本地是测试正常,上线后却反复弹出auth窗口,似乎无法通过验证。
分析后发现,本地php是用moudle方式运行的。在live是CGI/FastCGI 。 查阅后得知,由于收到CGI协议的限制,无法使用类似 PHP_AUTH_*这样的超级变量。
解决办法是通过 Apache 的rewrite功能,手动地把http auth 请求加入到环境变量中。
.htaccess 大致如下
#
# For CGI/FastCGI , attach Authroziation header in Env Variabels.
#
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]
这样,在php内就可以通过$_SERVER[‚HTTP_AUTHORZATION‘] 来获取http 的 Authorization的头部信息了。然偶通过字符串和base64解码就能获得用户输入的密码了。