PHPでPOSTでリダイレクトする方法を解説!

PHPでリクエストをPOSTでリダイレクトする方法についてご紹介します。リダイレクト先にリクエストのデーターを引き継ぐには、明示的にリダイレクトの目的を示すだけ!

コンテンツ [表示]

  1. 1PHPでPOSTでリダイレクトする方法
  2. 2PHPで307リダイレクトをする方法
  3. 3PHPでリダイレクトするとパラメータはどうなる?

PHPでPOSTでリダイレクトする方法

PHPでリダイレクトをする方法はheader関数を用いる方法と、下記でご紹介したheader関数以外でリダイレクトする方法があります。

あわせて読みたい
PHPでリダイレクトをheader関数以外で行う方法!のイメージ
PHPでリダイレクトをheader関数以外で行う方法!
PHPのheader関数以外でリダイレクトを行う方法について解説します。header関数でエラーが発生したり、リダイレクトがうまく動作しない場合など、header関数以外でリダイレクトしたい場合のリダイレクト方法を紹介します。

上記の様なPHPのheader関数以外で行うリダイレクトや、header関数を用いた302リダイレクト方法では、リダイレクトはGET形式で行われます。

PHPでリクエストをPOST形式でリダイレクトするには、リクエストの内容を引き継ぎながらリダイレクトする必要があります。

リクエストの内容を引き継ぎながらリダイレクトをするにはHTTPレスポンスステータスコード307を用います。

それでは、header関数を使って307リダイレクトをする方法について解説して行きたいと思います。

PHPで307リダイレクトをする方法


307リダイレクトをするには、header関数の第三引数へ「307」をセットします。

PHPのheader関数で307リダイレクト

header("Location: リダイレクト先URL", true, 307);


次に、下記のフローでリクエストがPOSTでリダイレクトできているか、サンプルコードを使って確認してみましょう。

① form.php:redirect.phpへPOSTリクエスト
② redirect.php:print.phpへ①の内容を引き継ぎながらリダイレクト

① form.php

<form action="redirect.php" method="post">
  POSTデータ
  <input type="text" name="test" value="POSTデータサンプル">
  <button type="submit">リダイレクト</button>
</form>

② redirect.php

header("Location: print.php", true, 307);

リダイレクト先でリクエストされた方法を確認するには、PHPの$_SERVER["REQUEST_METHOD"]を出力すると見る事ができます。

サンプルコードのリダイレクトボタンを押下すると、POSTでリダイレクトされている事が確認できます。

次に、リダイレクト時のパラメータについても確認してみましょう。

PHPでリダイレクトするとパラメータはどうなる?

PHPのheader関数を使ってリダイレクトすると、パラメータはどうなるのでしょうか?

HTTPレスポンスステータスコードにおいて、一時的なリダイレクトには302と307があります。


リダイレクト後のパラメータを実際にサンプルコードで確認してみましょう。まずは302リダイレクトを確認してみます。

リダイレクト方法と、受け取ったPOSTデータを出力してみます。
PHPのPOSTデータは$_POST変数に配列格納されていますのでprint_rで見てみましょう。

POSTでリクエストしたのに、リダイレクト先ではGETになっています。当然POSTデータは取得できていません。

次は307で試してみます。

307リダイレクトの場合、POSTでリクエストされ、POSTデータの値を渡す事ができている事がわかります。

このように、HTTPレスポンスステータスコードを使って明示的にリダイレクトの目的を指定する事により、リダイレクト先へ渡されるデータが変わってきます。

セキュリティの観点から考えると「大切なPOSTデータを目的もはっきりしない状態でリダイレクト先へは渡せない」という事ですね。
 

GeekHive採用サイト

関連記事