Заголовок PHP (Location: …): изменение URL-адреса в адресной строке

В настоящее время я работаю на мобильном сайте с аутентификацией, используя сеансы PHP с базой данных. У меня есть страница входа с формой, которая отправляется на сервер_login.php на submit. Затем файл php создает некоторые данные сеанса (хранятся в $ _SESSION) и перенаправляет пользователя обратно на страницу индекса:

header("location:../../index.php"); 

Новая веб-страница (index.php) загружается правильно; однако, когда заголовок перенаправляет страницу, URL-адрес в адресной строке не изменяется; он остается на * http: //localhost/php/server/server_login.php* вместо http: //localhost/index.php, и поэтому все мои другие ресурсы, которые используют относительные пути, не могут быть загружены. Как будто веб-страница все еще думает, что она находится на / php / server вместо /.

Как ни странно, мое другое использование заголовка («location: …») в logout.php работает и перенаправляет страницу с изменением URL.

Я убедился, что в моем * server_login.php нет выходных данных перед перенаправлением заголовка (выше это просто вызовы mysql для проверки), и я использовал ob_start () и ob_end_flush () тоже.

Существуют ли какие-либо методы для изменения URL-адреса в адресной строке (и, следовательно, мы надеемся исправить проблему относительного пути)? Или я делаю что-то неправильно?

P / S: Я использую jQuery Mobile.

EDIT: Вот мой код для перенаправления, который не меняет URL:

 // some other stuff not shown $sql = "SELECT * FROM $user_table WHERE email = '$myemail' AND password = '$mypassword'"; $login_result = mysql_query($sql, $connection); $count = mysql_num_rows($login_result); if ($count == 1) { // Successfully verified login information session_start(); if (!isset($_SESSION['is_logged_in'])) { $_SESSION['is_logged_in'] = 1; } if (!isset($_SESSION['email'])) { $_SESSION['email'] = $myemail; } if (!isset($_SESSION['password'])) { $_SESSION['password'] = $mypassword; } // Register user's name and ID if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id']))) { $row = mysql_fetch_assoc($login_result); $_SESSION['name'] = $row['name']; $_SESSION['user_id'] = $row['user_id']; } header("Location: http://localhost:8080/meet2eat/index.php"); } else { // Not logged in. Redirect back to login page header("Location: http://localhost:8080/meet2eat/php/login.php?err=1"); } 

Solutions Collecting From Web of "Заголовок PHP (Location: …): изменение URL-адреса в адресной строке"

Попробуйте изменить:

 header("Location : blabla") ^ | (whitespace) 

к

 header("Location: blabla") 

Ну, если сервер отправляет правильный заголовок перенаправления, браузер перенаправляет и, следовательно, «изменяет URL». Тогда это может быть проблема с браузером. Я не знаю, связано ли это с этим, но вы не должны отправлять относительный url в заголовок местоположения («HTTP / 1.1 требует абсолютного URI в качестве аргумента для» Location: включая схему, имя хоста и абсолютный путь, но некоторые клиенты принимают относительные URI. », http://php.net/manual/en/function.header.php ), а« местоположение »должно быть заглавным, например:

 header('Location: http://myhost.com/mypage.php'); 

В элементе формы добавьте data-ajax="false" . У меня была такая же проблема с использованием jQuery mobile.

У меня была такая же проблема с отправкой формы. Я сделал то, что отключил data-ajax.

Не используйте пустое пространство. Я была такая же проблема. Затем я удалил пробел, как:

 header(location:index.php); 

Тогда это сработало.

вы можете сделать перерыв; после вашего местоположения:

 header("HTTP/1.1 301 Moved Permanently"); header('Location: '. $YourArrayName["YourURL"] ); break; 

Вы уверены, что страница, которую вы перенаправляете, также не имеет перенаправления внутри нее, если данные сеанса не найдены? Это может быть вашей проблемой

Также да всегда добавьте пробелы, такие как @Peter O.

// Зарегистрировать имя пользователя и идентификатор

 if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id']))) { $row = mysql_fetch_assoc($login_result); $_SESSION['name'] = $row['name']; $_SESSION['user_id'] = $row['user_id']; } header("Location: http://localhost:8080/meet2eat/index.php"); 

изменить на

// Зарегистрировать имя пользователя и идентификатор

 if ((!isset($_SESSION['name'])) && (!isset($_SESSION['user_id']))) { $row = mysql_fetch_assoc($login_result); $_SESSION['name'] = $row['name']; $_SESSION['user_id'] = $row['user_id']; header("Location: http://localhost:8080/meet2eat/index.php"); } 

Я получил решение для вас. Почему бы вам не использовать Explode, если ваш URL-адрес похож на

Url-> website.com/test/blog.php

 $StringExplo=explode("/",$_SERVER['REQUEST_URI']); $HeadTo=$StringExplo[0]."/Index.php"; Header("Location: ".$HeadTo); 

Просто измените дом по своему вкусу

 $home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/home'; header('Location: ' . $home_url); 

Поскольку «cfphpflex» предлагает добавить break; после установки заголовка. Вы также можете повторить что-то, например, echo 'test'; ,

Вы можете использовать его как header(Location:../index.php) если он находится в другой папке

использование

header ("Location: index.php"); // эта работа на моем сайте

Подробнее читайте в заголовке () в документации php.

почему весь этот адрес местонахождения?

 http://localhost:8080/meet2eat/index.php 

вы можете просто использовать

 index.php 

если файлы php находятся в одной папке, и это лучше, потому что, если вы хотите разместить файлы или изменить порт, у вас не будет проблем с получением этого URL-адреса.