基本上我的主要目标是为每个网址添加基本身份验证,除了以“/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 等设置环境变量)
您似乎想要将基本身份验证应用于除以
"/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 之外