http basic auth - PHP_AUTH_USER& PHP_AUTH_PW未设置

时间:2013-07-24 18:27:54

标签: php apache basic-authentication

我已经查看了有关此问题HTTP Auth via PHP - PHP_AUTH_USER not set?PHP_AUTH_USER not set?的stackoverflow的其他几个问题,但他们都指出了“服务器API”被设置为CGI的问题,对我而言,它设置为“Apache 2.0处理程序”。

我正在使用UBUNTU 12.04LTS。

我的docroot中有一个名为my.php的简单脚本:

<?php
echo "Username: " . $_SERVER["PHP_AUTH_USER"] . ", Password: " . $_SERVER["PHP_AUTH_PW"];
?

当我运行wget时,我可以看到两者都是空的:

wget -v --http-user=johnsmith --http-password=mypassword http://192.168.1.163/my.php

返回:

Username: , Password: 

我启用了以下apache模块:

/etc/apache2/mods-enabled
alias.conf       authn_file.load       authz_host.load  autoindex.load  deflate.load  env.load   negotiation.conf  php5.load        rewrite.load   status.conf
alias.load       authz_default.load    authz_user.load  cgi.load        dir.conf      mime.conf  negotiation.load  reqtimeout.conf  setenvif.conf  status.load
auth_basic.load  authz_groupfile.load  autoindex.conf   deflate.conf    dir.load      mime.load  php5.conf         reqtimeout.load  setenvif.load

我也尝试在我的.htaccess中为“AuthType Basic”添加一行无效。

是否还需要设置或配置其他内容?

2 个答案:

答案 0 :(得分:1)

在我看来,您没有正确发送所需的参数! 你试过wget http://johnsmith:mypassword@192.168.1.163/my.php吗?

答案 1 :(得分:1)

对于PHP-CGI:

在.htaccess中添加:

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

并在脚本开头添加:

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':' , base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));