我使用PHP documentation中提供的示例#2使用HTTP身份验证
我已经成功配置了脚本,现在我可以使用我定义的凭据通过HTTP登录。但是如果在我的MAMP中我将模式从Identical PHP version for all hosts (module)
切换到Individual PHP version for every host (CGI)
,即使用户名和密码正确,脚本也会无限地询问我是否有正确的用户名和密码。
为什么会这样?
答案 0 :(得分:0)
在阅读了几十页有关此问题的内容后,我得出结论,使用CGI进行HTTP摘要身份验证没有解决方法。
但是,如果您能够使用HTTP基本身份验证,则有一种解决方法。所以我在Server API运行CGI的情况下实现了异常,并在服务器运行Apache Module时保留了我的摘要式身份验证。
我已经关注了@sanderbee提供的link 这link也帮助了我。
使用预定义的常量PHP_SAPI我设法检查Server API是否正在运行CGI,如果是,我运行基本的HTTP身份验证:
function admin_digest_auth(){
if (substr(PHP_SAPI, 0, 3) == 'cgi') {
return admin_basic_auth();
}
// You HTTP Digest authentication code ...
}
function admin_basic_auth(){
// split the user/pass parts
if(isset($_SERVER['REDIRECT_HTTP_AUTH']) && !empty($_SERVER['REDIRECT_HTTP_AUTH'])){
list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) =
explode(':' , base64_decode(substr($_SERVER['REDIRECT_HTTP_AUTH'], 6)));
}
// open a user/pass prompt
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="My Realm"');
header('HTTP/1.0 401 Unauthorized');
exit('Unauthorized');
// validate submited user / pass
} else {
if($_SERVER['PHP_AUTH_USER'] !== 'admin' ||
$_SERVER['PHP_AUTH_PW'] !== 'mypassword'){
header('HTTP/1.1 401 Unauthorized');
admin_basic_auth();
}
}
return TRUE;
}
总而言之,您必须在.htaccess
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTH:%{HTTP:Authorization},L]