web-dev-qa-db-ja.com

PHP header(Location:...):アドレスバーのURLを強制的に変更します

現在、データベースとのPHPセッションを使用した認証を使用して、モバイルサイトで作業しています。送信時にserver_login.phpに進む形式のログインページがあります。 phpファイルはいくつかのセッションデータ($ _SESSIONに保存)を作成し、ユーザーをインデックスページにリダイレクトします。

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

新しいWebページ(index.php)は正しく読み込まれます。ただし、ヘッダーがページをリダイレクトしても、アドレスバーのURLは変更されません。それはhttp://localhost/index.phpの代わりに* http://localhost/php/server/server_login.php*のままであり、したがってすべてです。相対パスを利用する私の他のリソースをロードできませんでした。 Webページはまだ/ではなく/ php/serverにあると考えています。

不思議なことに、私の他のlogout.phpでのヘッダー( "location:...")の使用はうまくいき、URLを変更することでページを正常にリダイレクトします。

私はヘッダリダイレクトの前に私の* server_login.php *に出力がないことを確認しました(上でそれは単にチェックするmysql呼び出しです)そして私もob_start()とob_end_flush()を使いました。

アドレスバーのURLを強制的に変更する方法はありますか(したがって、相対パスの問題を解決することをお勧めします)。それとも私は何か悪いことをしていますか?

P/S:私はjQuery Mobileを使っています。

編集:これは、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");

}
53
vemoxy

変更してみてください。

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

header("Location: blabla")
63
BuraCULa

サーバーが正しいリダイレクトヘッダーを送信すると、ブラウザはリダイレクトして「URLを変更」します。ブラウザの問題かもしれません。関係ないかどうかはわかりませんが、ロケーションヘッダーに相対URLを送信しないでください( "HTTP/1.1では"Locationの引数として絶対URIが必要です。スキーム、ホスト名、絶対パスを含みます。しかし、一部のクライアントは相対URIを受け入れます。 "、 http://php.net/manual/en/function.header.php )そして" location "は大文字にする必要があります。

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

フォーム要素にdata-ajax="false"を追加します。私はjqueryモバイルを使用して同じ問題を抱えていた。

17
kackleyjm

私はフォームを投稿するのと同じ問題を抱えていました。私がしたことは、data-ajaxをオフにすることでした。

6
Hadi

あなたは休憩したいと思うかもしれません。あなたの場所の後:

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

空白を使用しないでください。私は同じ問題を抱えていました。それから私は以下のように空白を取り除きました:

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

それからそれは働いた。

5
Hasib Omi

//ユーザーの名前と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");

への変更

//ユーザーの名前と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");
}
1
GULIM SHAH

セッションデータが見つからない場合、リダイレクトしているページもリダイレクトされていませんか?それはあなたの問題かもしれません

また@Peter Oが提案するように常に空白を追加することもできます。

1
Joe Barbour

"cfphpflex"が示唆しているように、ヘッダを設定した後にbreak;を追加することができます。 echo 'test';のように何かをエコーすることもできます。

1
shlgug

私はあなたのための解決策を得た、あなたのURLがのようなものであるならなぜあなたはむしろExplodeを使わないでください

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

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

好みに合わせて家を変えるだけ

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

header('Location: ' . $home_url);
0
aary trivedi