Подтвердить что ты не робот

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

В настоящее время я работаю на мобильном сайте с аутентификацией, используя сеансы PHP с базой данных. У меня есть страница входа с формой, которая отправляется на server_login.php. Затем файл 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 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");

}
4b9b3361

Ответ 1

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

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

Для

header("Location: blabla")

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

header("location:index.php"); or header('location:index.php');

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

Ответ 6

вы можете поместить break; после своего местоположения:

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

Ответ 7

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

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

Ответ 8

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

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");
}

Ответ 9

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

Ответ 10

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

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

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

Ответ 11

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

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

header('Location: ' . $home_url);

Ответ 12

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

Ответ 13

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

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

подробнее читайте header() в документации php.

Ответ 14

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

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

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

index.php

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