我的主机提供商(应我的请求(刚刚将我转移到PHP 7.4,并在这个过程中将PHP从作为Apache模块(现在是2.4.52(运行改为CGI运行——据我所知,这很好。我的网站使用基本身份验证,我的代码严重依赖于$_SERVER['REMOTE_USER']
来获得大量位置的用户名。
至少在某些情况下(到目前为止,我还没有看到(,该变量没有设置,而是$_SERVER['REDIRECT_REMOTE_USER']
设置。在其他地方,可能会设置其他$_SERVER
变量,但我还没有见过它们(我暂时恢复到旧配置,因为这破坏了网站(。[顺便说一句,很多代码现在已经有20多年的历史了。]
所以我的问题是:有没有什么方法可以强制$_SERVER['REMOTE_USER']
始终使用用户名设置,而不必修改代码中的所有位置?特别是如果有一些配置设置我可以使用?我确实看到了一个很好的功能来获取用户名PHP从基本授权获取用户名但我希望能找到一种避免更改所有旧代码的方法。或者还有其他想法吗?
只有
REDIRECT_REMOTE_USER
被设置为用户名
您也许可以在主脚本运行之前自动包含一个设置REMOTE_USER
(来自REDIRECT_REMOTE_USER
(的简短PHP脚本。
例如,在根中的.user.ini
文件中设置auto_prepend_file
auto_prepend_file=/path/to/fix-http-authentication.php
然后在fix-http-authentication.php
脚本中,类似于:
<?php
if (empty($_SERVER['REMOTE_USER']) && isset($_SERVER['REDIRECT_REMOTE_USER'])) {
$_SERVER['REMOTE_USER'] = $_SERVER['REDIRECT_REMOTE_USER'];
}
尝试在上重写引擎后将其放入.htaccess
RewriteRule .* - [E=REMOTE_USER:%{HTTP:Authorization}]
这应该在使用CGI时设置REMOTE_USER环境变量。