如果为 false 则执行 PHP 基本身份验证

问题描述 投票:0回答:1

基本上我的主要目标是为每个网址添加基本身份验证,除了以“/donation”开头的网址,因为我需要银行在开发期间随时联系我们。

我在 htaccess 上尝试了很多东西,但没有任何效果(通过检查 request_uri 等设置环境变量)

我试图用 PHP 让它发生一些奇怪的事情,这是我的代码:

if (substr($_SERVER['REQUEST_URI'], 0, strlen('/donation')) !== '/donation') {
    $AUTH_USER = 'admin';
    $AUTH_PASS = 'admin';
    header('Cache-Control: no-cache, must-revalidate, max-age=0');
    $has_supplied_credentials = !(empty($_SERVER['PHP_AUTH_USER']) && empty($_SERVER['PHP_AUTH_PW']));
    $is_not_authenticated = (
        !$has_supplied_credentials ||
        $_SERVER['PHP_AUTH_USER'] != $AUTH_USER ||
        $_SERVER['PHP_AUTH_PW']   != $AUTH_PASS
    );
    if ($is_not_authenticated) {
        header('HTTP/1.1 401 Authorization Required');
        header('WWW-Text: '. $_SERVER['REQUEST_URI']);
        header('WWW-Authenticate: Basic realm="' . $_SERVER['REQUEST_URI'] . '"');
        exit;
    }
}

基本上,我检查 Url 是否不以 /donation 开头,并尝试进行基本身份验证,在我看来,if 的内部代码不得在 /donation 上执行,但它确实......

我尝试了一些更简单的测试:

if (substr($_SERVER['REQUEST_URI'], 0, strlen('/donation')) !== '/donation') {
    echo "NOT IN DONATION";
    die():
}

这个工作模具仅在不以 /donation 开头的任何内容上执行,但第一个代码始终在我输入的任何 url 上执行。

你知道这里发生了什么吗?

提前谢谢您! 狮子座

我在 htaccess 上尝试了很多东西,但没有任何效果(通过检查 request_uri 等设置环境变量)

php apache basic-authentication
1个回答
0
投票

您似乎想要将基本身份验证应用于除以

"/donation."
开头的 URL 之外的所有 URL 您的 PHP 代码似乎走在正确的轨道上,但检查请求 URI 的 if 条件存在问题。 您应该根据您的情况使用
$_SERVER['REQUEST_URI']
,而不是
$_SERVER['REQUEST_URI']

if (substr($_SERVER['REQUEST_URI'], 0, strlen('/donation')) !== '/donation') {
    $AUTH_USER = 'admin';
    $AUTH_PASS = 'admin';
    header('Cache-Control: no-cache, must-revalidate, max-age=0');
    $has_supplied_credentials = !(empty($_SERVER['PHP_AUTH_USER']) && empty($_SERVER['PHP_AUTH_PW']));
    $is_not_authenticated = (
        !$has_supplied_credentials ||
        $_SERVER['PHP_AUTH_USER'] != $AUTH_USER ||
        $_SERVER['PHP_AUTH_PW']   != $AUTH_PASS
    );
    if ($is_not_authenticated) {
        header('HTTP/1.1 401 Authorization Required');
        header('WWW-Text: ' . $_SERVER['REQUEST_URI']);
        header('WWW-Authenticate: Basic realm="' . $_SERVER['REQUEST_URI'] . '"');
        exit;
    }
}

这应该按预期工作,将基本身份验证应用于除以

"/donation."

开头的所有 URL 之外
© www.soinside.com 2019 - 2024. All rights reserved.