・header関数のLocationを使って、別ページにリダイレクトしたい。
・header関数にURLを指定しているけど、うまくリダイレクトされない・・・。
PHPでは、header関数を使ってリダイレクト処理を行うことができますが、詳しい使い方を知らない人も多いでしょう。
そこでこの記事では、PHPのheader関数でLocationを使って別ページにリダイレクトする方法について解説していきます!
この記事を読めば、header関数の使い方やLocationを使ってリダイレクトする方法を理解できるでしょう。
header関数のLocationでリダイレクトしたいけどやり方がわからない、うまくリダイレクトされないという人は、ぜひ最後までご覧ください。
目次
header関数とは?
header関数とは、HTTPヘッダを送信する関数です。
HTTPヘッダは、クライアントからのリクエスト(要求)→サーバーからのレスポンス(応答)の流れにおいて、どんな情報を要求して、どんなコンテンツを受け取るのか、を定義するものです。
例えば、クライアント(ブラウザでサイトを閲覧しているユーザー)がボタンやリンクを押したときに、サーバーに対して「〇〇の情報が欲しい」というように要求するのがリクエスト。
そして、そのリクエスト(要求)に対して、サーバーが「〇〇の情報を返します」というようにクライアントに情報を返すのがレスポンスになります。
header関数では、このようなHTTPヘッダを送信する役割があり、リダイレクト処理を行うことができるのです。
また、以下の記事でもHTTPについて解説しているので、参考としてご覧ください。
HTTPステータスコードってなに?header関数のLocationで別ページにリダイレクトする方法
header関数では、「Location」というもの使ってURLを指定することで、指定のURL先に遷移することができます。
1 |
header(‘Location: 遷移先のURL’) |
コードの書き方は上記の通りで、「Location: 遷移先のURL」というように指定します。
このURLは、「http://」から始まる絶対パス、または「./」から始まる相対パスのどちらでも指定することが可能です。
実際にコードに書いて、結果がどのようになるのか見てみましょう。
1 2 3 4 |
<?php header('Location: https://google.com'); exit(); ?> |
例えば上記のように、header関数に「Location: GoogleのURL」を指定してみるとGoogleのトップページにリダイレクトされます。
ちなみに、exitというのは処理を終了する働きがあり、header関数によってページをリダイレクトした後に処理を終了させています。
これは、ページがリダイレクトされた後に、PHPの処理が次に進んでしまうのを防ぐためです。
※exitについては後ほど詳しく解説します。
例えば、ログインが必要な画面にアクセスした際、ログアウト状態の場合だとログイン画面に遷移しなければいけません。
そこで、PHPの処理で条件を設定し、ある条件に満たしていない場合は、指定のURLにリダイレクトする(ログイン画面にリダイレクトする)というようにheader関数を使います。
実際にどのような場面でheader関数が使われるのか、意識しながら学習するといいでしょう。
header関数のリダイレクトで注意すること
header関数でLocationを使ってURLを指定すれば、指定のページにリダイレクトできることがわかりました。
しかし、書き方はあっているのに指定のページに遷移してくれない、エラーが出てしまう、といった状態に悩む人も多いです。
そのような場合は、header関数がうまく動作していない原因がいくつか考えられるでしょう。
なのでここでは、header関数のリダイレクトで注意するべきことを解説していきます。
exitを指定する
まず、header関数の後は、exitを指定することです。
1 2 3 4 |
<?php header('Location: https://google.com'); exit(); //リダイレクト後は、exitで処理を終了させる! ?> |
先ほども少し解説しましたが、exitは処理を終了させるために指定するものです。
header関数によってページがリダイレクトされた後も、PHPの処理はどんどん次に進んでしまいます。
実際の場面では、「入力チェック」→「次の画面」という順で処理が回っていき、その途中でエラーが見つかったら元のページにリダイレクトするという流れが多いです。
その際に、ページがリダイレクトしている隣でPHPの処理が次に進んでしまうと、途中でエラーが出てしまう可能性もあります。
ページをリダイレクトする場合はきちんとリダイレクト先のページを表示してほしいので、その時は一旦処理を終了させるためにexitを指定するのです。
なので、header関数の後は、exitを指定することを覚えておきましょう。
header関数の前にechoやprint、HTMLなどを指定しない
続いて注意するべきことは、header関数の前にechoやprint、HTMLなどを指定しないことです。
1 2 3 4 5 6 |
<p>こんにちは</p> <!-- header関数の前にHTMLが指定されている --> <?php header('Location: https://google.com'); exit(); ?> |
上記のように、header関数の前(リダイレクト前)にechoやprint、HTMLなどのような何かしら出力するものを指定してはいけません。
header関数の前にHTMLを指定すると、エラーになり、リダイレクトされなくなってしまいます。
なので、header関数の前にはechoやprint、HTMLなどを指定しないようにしましょう。
また、エラーが出て動かないという人は、header関数の前後にechoやprint、HTML要素などが指定されていないか確認するといいでしょう。
header関数の前に改行を入れない
また、header関数の前に改行を入れないように注意しましょう。
1 2 3 4 5 |
<?php //header関数の前に改行が入っている header('Location: https://google.com'); exit(); ?> |
header関数の前に改行が入っていると、エラーが起きてしまうことがあります。
指定のURL先にうまくリダイレクトされない原因になるので、気をつけましょう。
あと、phpタグの前にスペースが入っている場合も注意が必要です。
コードの始まりの「?php」の前にスペースがあると、HTMLを出力したとみなされて、処理がうまく動かなくなってしまいます。
なので、不要な改行やスペースが含まれていないか、しっかりと確認しておきましょう。
まとめ
今回は、PHPでheader関数のLocationを使って別ページにリダイレクトする方法を解説しました。
header関数に、Locationを使ってURLを指定するだけで簡単に別ページにリダイレクトすることができます。
ですが、header関数の前にechoやprint、HTMLなどの記述があると、エラーが起こってしまうので、注意しましょう。
また、header関数でリダイレクトした後は、必ずexitを指定しておきましょう。
この記事がPHPの学習に役立つと幸いです。