52

由于某种原因,其中没有任何代码

if (isset($_SERVER['PHP_AUTH_USER']) &&
    isset($_SERVER['PHP_AUTH_PW']))
{

// When the above is set, the code that is here will execute of course

}

正在为我执行。当我输入正确的用户名和密码后,再次弹出授权提示框。如果两个字段都正确并且我按下回车键,这两个字段不会被“设置”吗?但由于某种原因,情况并非如此。我做错了什么?谢谢你。

4

8 回答 8

79

在 CGI 模式 PHP 中使用 HTTP Basic Auth 有一种“明智的方法”:在 .htaccess 中使用

RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

并在 PHP 中使用

list($_SERVER['PHP_AUTH_USER'], $_SERVER['PHP_AUTH_PW']) = 
  explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));
于 2011-10-17T11:12:37.097 回答
25

尝试这个

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

在您必须放入根目录的 .htaccess 文件中

接着

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

在你的 php 脚本的开头

于 2014-01-07T22:27:06.910 回答
13

我在 Ubuntu 14.04 上使用在 PHP-PFM + Apache 2.4 上运行的 Symfony 2.5.7。我有 BASIC_AUTH 工作,它需要通过添加正确配置 Apache VirtualHost:

SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1

正如这里也提到的。

于 2014-12-01T13:47:01.250 回答
4

从 Apache 2.4.13 开始,您只需在 .htaccess 中使用CGIPassAuth指令:

CGIPassAuth On
于 2021-02-14T13:12:28.387 回答
3

根据phpinfo(),我的服务器 API 是 CGI/Fast CGI,所以我通过将以下内容放入我的.htaccess文件中解决了这个问题:

RewriteEngine on
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ app.php [QSA,L]
于 2013-11-13T12:18:30.703 回答
2

如果授予用户访问权限,请在 URL 中提供用户名/密码,请检查是否

AuthType Digest

在您的 VHost/Directory/.htaccess 配置中被授权。

这为我的用例修复了它。

于 2012-09-11T10:07:22.900 回答
2

试试$_SERVER['REMOTE_USER']。这适用于我的 PHP 5.3 CGI + Apache 安装。

于 2011-08-16T05:15:33.523 回答
-3

在我主机的服务器上,使用$_SERVER['REDIRECT_REMOTE_USER']而不是$_SERVER['PHP_AUTH_USER']

于 2012-10-14T02:11:29.720 回答