我有Plesk Server,PHP作为CGI运行。
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
echo 'Text to send if user hits Cancel button';
exit;
} else {
echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}
上面的脚本应该提示用户名和密码。(是的)在输入任何用户/通行证后,应将其打印出来。(不,它总是要求用户/通行证)
如何修复?
我的一台服务器上也遇到了这个问题,下面的程序帮我解决了这个问题。这显然是由于使用了CGI。http://www.besthostratings.com/articles/http-auth-php-cgi.html
.htaccess:
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization},L]
PHP:
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
以下是我在任何正在开发的项目中包含的文件:
<?php
// protecting page of unauthorized access
if (isset($_SERVER['PHP_AUTH_USER']) && isset($_SERVER['PHP_AUTH_PW'])){
$user = $_SERVER['PHP_AUTH_USER'];
$pass = $_SERVER['PHP_AUTH_PW'];
if ($user == 'username' && $pass == 'dev'){
return;
}
}
header('WWW-Authenticate: Basic realm="Protected zone"');
header('HTTP/1.0 401 Unauthorized');
echo 'Login failed.';
exit;
只需将其包含在您的index.php
中,然后再执行其他操作。
尝试在.htaccess文件中添加beow行
SetEnvIf Authorization .+ HTTP_AUTHORIZATION=$0
您是否考虑过使用更标准的.htaccess/.htpassword文件(如果您使用的是Apache)?http://httpd.apache.org/docs/2.0/howto/auth.html
此处$_SERVER['HP_AUTH_USER']看起来从未设置过,因此它将始终显示此弹出窗口。