我已经查看了有关此问题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”添加一行无效。
是否还需要设置或配置其他内容?
答案 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)));