1

两天以来,我尝试在一个简单的示例代码中找到我的问题:

<?php

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['REMOTE_USER']}.</p>";
    echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";
}

?>

Auth Popup 可以正常打开,我发送用户和密码。但是弹出窗口一次又一次地打开。如果我取消弹出窗口,401 消息将正确显示。

我试图用 .htaccess 填充

RewriteRule ^(.*)$ index.php [E=REMOTE_USER:%{HTTP:Authorization},QSA,L]

但这没有任何改变。感谢您提出解决此问题的任何想法!

4

1 回答 1

1

你在 PHP 上使用什么堆栈?假设它是 PHP-CGI,请在 .htaccess 中尝试以下操作:

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

确保这mod_rewrite在服务器上可用并且 .htaccess 文件被解析(AllowOverride必须设置为 all in httpd.conf)。

根据您的基础架构,可能有某种代理会丢弃 auth-header。对于干净的测试环境,我建议安装本地 Apache2。像xampp这样的堆栈提供了开箱即用的完整开发区域。

于 2018-06-12T13:48:52.467 回答