localhost перенаправил вас слишком много раз, используя mod_rewrite - PullRequest
0 голосов
/ 28 января 2020
if( isset($_COOKIE['user']) && !empty($_COOKIE['user']) ){
    header("Location: ./");
}

Это мой код для страницы входа. Чего я хочу добиться, так это то, что когда кто-то входит в систему [если повар ie с именем user существует], пользователь должен быть перенаправлен на домашнюю страницу. Я использую mod_rewrite для записи URL.

Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда существует повар ie, а я go до localhost/project/login/, он показывает ERR_TOO_MANY_REDIRECTS:

ERR_TOO_MANY_REDIRECTS

Однако, когда я использую localhost/project/login.php, он работает нормально.

1 Ответ

1 голос
/ 29 января 2020
header("Location: ./");

./ - это относительный URL . Следовательно, если вы отправите обратно Location: ./ в ответе HTTP, тогда браузер будет интерпретировать это как относящийся к тому, что в данный момент отображается в браузере.

Итак ...

При запросе localhost/project/login/ (обратите внимание на конечный пункт sh), браузер будет перенаправлять обратно на localhost/project/login/ (тот же URL - перенаправление l oop).

Когда запрашивая localhost/project/login.php, браузер будет перенаправлять на localhost/project/ (я полагаю, ваша домашняя страница).

Чтобы всегда перенаправлять обратно на домашнюю страницу (/project/) с любой глубины URL-пути, тогда вам потребуется как минимум укажите root -относительный URL в заголовке Location. Например:

header('Location: /project/');

(Или вы не можете рассчитать текущую глубину пути из запроса, чтобы построить относительный URL-путь. Но если вы собираетесь это сделать, то вы можете также рассчитать абсолютный URL-адрес домашней страницы - или сохранить его - что, возможно, предпочтительнее.)

...