Где вы используете заголовок команды ()?
У меня есть следующий код в обработчиках / handle_login.php. Пользователь отправился на сайт из index.php
который является стартовым.
if(!$logged_in){ header("Location: index.php"); die("You are not logged_in"); }
Если if-clause истинно, я получаю ошибку 404, так как заголовок помещает меня в handlers/index.php
, а не index.php
.
Хотя я согласен с ниламо и графом, я надеюсь, что смогу дать более полную картину:
Использование относительных путей может иметь очень странные эффекты в зависимости от того, где браузер «думает», что он находится в иерархии вашего сайта. Например, предположим, что на сайте есть индексный файл '/index.php', но он настроен на принятие модуля и действия в пути URI. У вас может быть очень хороший URL-адрес:
http://www.yoursite.com/forms/contact/
Из этой ситуации возвращаем заголовок, например:
header("Location: index.php");
может привести к тому, что браузер попытается запросить
http://www.yoursite.com/forms/contact/index.php
что явно не то, что вы хотите. По этой причине обычно лучше использовать «/index.php», как рекомендовано выше, или даже лучше использовать полный URL-адрес, когда это возможно.
Надеюсь это поможет.
Укажите местоположение в полный URL-адрес index.php, а не только имя файла. Согласно php.net, это правильный способ сделать это, не используйте относительные пути. Вот пример:
if(!$logged_in){ header("Location: http://exampledomain.com/index.php"); die("You are not logged_in"); }
Попробуйте использовать '/':
if(!$logged_in){ header("Location: /index.php"); die("You are not logged_in"); }
Без косой черты предполагается, что вы ссылаетесь на что-то в текущем каталоге. Приклеивая эту косую черту спереди, вы явно ссылаетесь на файл в корне сайта. Поскольку страница является «index.php», вы можете так же легко использовать «header (« Местоположение: / »)».