Это действительно ограничение базовой аутентификации HTTP.
Однако вы можете настроить ответ 401 (который, как я полагаю, вы видите, в отличие от 403), который сервер в противном случае отправил бы обратно.Однако вы можете напрямую перенаправить из пользовательского 401, что приведет к тому, что клиент получит ответ 3xx, а не 401, что не так информативно и запутанно для пользователей.Или вы представляете «дружеское» сообщение со ссылкой на то, откуда они пришли.
Дополнительная проблема заключается в том, чтобы знать, на какую страницу отправить пользователя обратно.Если вы не сохраняете эту информацию в сеансе, вам нужно будет изучить заголовок HTTP-запроса Referer
, который может вообще не быть установлен.
Например ... в верхней части вашего .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 «перенаправление») обратно на ссылающуюся страницу (если установлено) через столько секунд.