我需要在几页上设置身份验证,并在未经授权的情况下将用户转发回去。现在,它显示错误的目标页面。
Unauthorized
This server could not verify that you are authorized to access the
document requested. Either you supplied the wrong credentials (e.g.,
bad password), or your browser doesn't understand how to supply the
credentials required.
我在基本auth和apache conf方面有0知识。我对Google有深入了解,但未找到任何解决方案,请提出建议。
谢谢
SetEnvIf Request_URI ^/en auth=1
AuthName "Please login to access english part"
AuthType Basic
AuthUserFile "/path/to/my/.htpasswd"
# first, allow everybody
Order Allow,Deny
Satisfy any
Allow from all
Require valid-user
# then, deny only if required
Deny from env=auth
答案 0 :(得分:0)
这实际上是HTTP基本身份验证的限制。
但是,您可以自定义服务器将发送回的401响应(我认为这是您所看到的,而不是403)。您可以直接从自定义401重定向,但是这将导致客户端收到3xx响应,而不是401,这对于用户而言并没有那么多信息和混乱。或者,您显示一条“友好的”消息,并带有指向其来源的链接。
另一个问题是知道将用户发送回哪个页面。除非您将此信息存储在会话中,否则您将需要检查Referer
HTTP请求标头,该标头可能根本没有设置。
例如,在.htaccess
文件顶部,为401响应定义您的自定义错误文档:
ErrorDocument 401 /errordocs/e401.php
在/errordocs/e401.php
中,您会看到类似以下内容的
<?php
/**
* 401 Unauthorized - Error Document
*/
// Get the HTTP Referer (if set at all)
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null;
// Immediately redirect back to the referring page if known
// But the client then sees a 3xx response, without any error, which could be confusing for users
if (!empty($referer)) {
header('Location: '.$referer,true,302);
exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<title>401 Unauthorized</title>
</head>
<body>
<h1>401 Unauthorized</h1>
<p>Sorry, you do not have permission to view that resource.</p>
<p>
<?php if (empty($referer)): ?>
<a href="/">Go back to the home page</a>
<?php else: ?>
<a href="<?=$referer?>">Go back to <?=$referer?></a>
<?php endif; ?>
</p>
</body>
</html>
要“自动”执行此操作,您可以在几秒钟后将元刷新(或JS“重定向”)实施回参考页(如果已设置)。