header(“ Location:”);を含む前のページに戻る PHPで


124

この質問のタイトルは私の質問を説明しています。PHPページの訪問者を前のページにリダイレクトするにはどうすればよいですか?header( "Location: URL of previous page" );


header( 'Location:'。$ _SERVER ['HTTP_REFERER']);
raskul

このソースw3schools.com/php/php_superglobals_server.aspによると、すべてのベンダーがサポートしているわけではないため、信頼性が高くありません
mohadennis

回答:


246

試してください:

header('Location: ' . $_SERVER['HTTP_REFERER']);

これは安全なページ(HTTPS)では機能しない可能性があり、ヘッダーがハイジャックされてユーザーを他の宛先に送信する可能性があるため、全体的にかなり悪い考えです。ヘッダーはブラウザーによって送信されることすらありません。

理想的には、次のいずれかを行います。

  • リターンアドレスをクエリ変数としてリクエストに追加します(例:?back = / list)
  • コードに戻りページを定義します(つまり、成功したすべてのフォーム送信がリストページにリダイレクトされます)。
  • 次の移動先のオプションをユーザーに提供します(例:保存して編集を続行するか、保存するだけ)。

19
見知らぬことが起こった:)
Dimitry

3
@Colあなたはこれで実際的な問題を証明できますか?
ペッカ

1
リファラーを使用して、それが設定されて有効かどうかを事前にテストした後、定義されたページ間コンテキストで完全に許容できる方法である可能性があります。大多数のブラウザーが適切なHTTP_REFERERを送信します。
Pekka

1
@Colデモのために何かをしなければならなかったとき、私はこれをプロダクションで使用しました。私の回答からわかるように、HTTP_REFERERに基づくリダイレ​​クトの代わりに、他に3つのソリューションを提供します。
Dimitry '13年

2
@Madmartiganは本当に奇妙な動作のように聞こえます。ネットで確認できる唯一のヒントは、リダイレクトの問題です。とにかく、100%の安全性が必要な場合、リファラーを使用するのは適切ではないことに同意します
Pekka

22

とてもシンプルなので、これを使うだけです

header("location:javascript://history.go(-1)");

私にとってはうまくいきます


2
これは本当に賢く聞こえましたが、FF10で私は得"Corrupted Content Error The page you are trying to view cannot be shown because an error in the data transmission was detected."ます。
ウェズリー・マーチ

ウェズリー・マーチ、私がほとんどすべての主要なブラウザーでうまく機能していることは、あなたが言及したものを含んでいました。あなたが歴史に何かを持っているページに来た場合にのみ、あなたのためのその唯一の仕事。
Hammad

5
これにより、前のページがブラウザのキャッシュから提供される可能性があります。
aksu 2016年

14

なんとかしてその場所を保存する必要があります。

それがPOSTフォームであるとしましょう。現在の場所を非表示フィールドに入力し、それをheader()場所で使用します。


14

ほんの少しの追加:exit;残りのコードをロードまたは実行したくない場合に備えて、ヘッダー関数の後に追加することは一般的で既知のことだと思います...

header('Location: ' . $_SERVER['HTTP_REFERER']);
exit;

私にとっては「」だけです。
Alexander Guo

2

これをJavascriptで試してください:

 $previous = "javascript:history.go(-1)";

または、PHPで試すこともできます。

if(isset($_SERVER['HTTP_REFERER'])) {
    $previous = $_SERVER['HTTP_REFERER'];
}

1

ユーザーが複数のページを右クリックしてから戻って保存する可能性があるため、セッション変数に以前のURLを保存することは不適切です。

セッション変数内の以前のURLをフォームの非表示フィールドに保存し、ヘッダーを保存した後( "Location:save URL of calling page");


$ _SERVER ['http_referrer']を使用できないのはなぜですか?
Vignesh、2015年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.