PHPでリダイレクトをheader関数以外で行う方法!

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

コンテンツ [表示]

  1. 1PHPでリダイレクトをheader関数以外で行いたい
  2. 1.1header関数の前にHTMLが出力されている
  3. 1.2header関数内に全角スペースが入っている
  4. 2PHPでリダイレクトをheader関数以外で行う方法
  5. 2.1PHPでJavaScriptを出力してリダイレクトする
  6. 2.2PHPでmetaタグを出力してリダイレクトする
  7. 3まとめ

PHPでリダイレクトをheader関数以外で行いたい

header関数がうまく動作しませんか?様々な要因でどうしてもheader関数以外でリダイレクトしないといけないケースもあるかと思います。

まずは、header関数が正しく動作しない原因について確認してみましょう。

header関数の前にHTMLが出力されている

header関数は、HTMLのDOCTYPE宣言や<html>タグよりも前に記述しなければいけません。

サーバーの設定でPHPの警告が表示されていない可能性がありますが、通常下記の様な警告文が表示されます。

PHPのWarningメッセージ

Warning: Cannot modify header information - headers already sent by ...

header関数内に全角スペースが入っている

header関数のスペースが半角ではなく全角スペースになっていた場合、header関数が正常に動作しません。

半角スペース2個と全角スペースは見た目で違いを判断しにくいですが、プログラム上では全く別物です。コンピューターが認識する文字コードが異なる為、関数のスペルミスと同じ扱いとなります。

エディターの機能でスペースの違いを可視化してみると判断しやすくなります。

また下記のサービスではソースコードを貼り付けることで、全角スペースや全角文字を検索することが出来ます。このようなサービスで全角スペースを探すのも良いかと思います。

全角チェッカー。全角文字が含まれているか確認
HTMLで日本語ページに併せて英語ページを作成するなどの場合、うっかり全角文字が含まれていないか確認するツールです。各種プログラムコードやドキュメントのチェックにも最適。

PHPでリダイレクトをheader関数以外で行う方法

それではheader関数以外でリダイレクトをする方法についてご紹介したいと思います。

header関数以外でPHPを使ってリダイレクトするには、基本的にクライアントサイドへ出力した文字列によって動作する方法になります。

まずはその方法について解説します。

PHPでJavaScriptを出力してリダイレクトする

JavaScriptでリダイレクトをするには、下記の様に記述します。

JavaScriptでリダイレクト

location.href='リダイレクト先のURL';

JavaScriptのリダイレクトをPHPで出力すると、クライアントサイドで画面読込後にリダイレクトされます。

それでは実際にサンプルコードで確認してみましょう。「RUN」ボタンを押すとリダイレクトされます。

無事にJavaScriptでリダイレクトできる事が確認できました。クライアントサイドに出力された後でリダイレクトされるため、画面のちらつきが少し気になります。

JavaScriptは、サーバーからブラウザがコードを受け取り、クライアント側で実行する仕組みのプログラミング言語です。そのため、ユーザーがWebブラウザの設定でJavaScriptを無効にしている場合はリダイレクトされません。

また、検索エンジンのクローラーにサイト移転が伝わらないこともあります。JavaScriptによるリダイレクトは一時的な方法として活用されることをお勧めします。

PHPでmetaタグを出力してリダイレクトする

HTMLのmetaタグを使ってリダイレクトをするには、下記の様に記述します。

metaタグでリダイレクト

<meta http-equiv="refresh" content="リダイレクトまでの秒数;URL=URL">

HTMLのmetaタグを使ったリダイレクト方法については、下記で詳しくご紹介しています。

あわせて読みたい
meta refreshのリダイレクトの使い方を解説!のイメージ
meta refreshのリダイレクトの使い方を解説!
meta refreshはHTMLでリダイレクトをする方法で、head要素の中にタグを1行追加するだけでリダイレクトが出来ます。meta refreshによるリダイレクトのやり方と効かない場合の対処法をサンプルコード付きで解説します。

サンプルコードで実際のリダイレクトの動きを確認してみましょう。

HTMLのmetaタグでもリダイレクトできる事が確認できました。こちらも画面のちらつきが少し気になります。

metaタグでのリダイレクトの場合は、検索エンジンのクローラーがリダイレクト前のURLの評価を全て引き継ぐ保証が無いので、SEOに悪影響が出る可能性があります。

また、Web関連技術の標準化団体 W3C(World Wide Web Consortium)は2000年から使用しないことを推奨しています。metaタグでのリダイレクトも一時的なリダイレクト方法として活用される事をお勧めします。

まとめ

PHPでheader関数以外の方法でもリダイレクトする事はできますが、あくまで一時的なリダイレクト方法になります。

恒久的なリダイレクトの場合はWEBサーバーのソフトウェア側でのリダイレクトの方が安心です。

SEO対策の考慮が必要ないWEBアプリケーション内であれば、画面のちらつきは気になりますが、問題なくリダイレクトできるので、使う場所と用途によって使い分ける事をお勧めします。

GeekHive採用サイト

関連記事