PHPでリダイレクトをheader関数以外で行う方法!
PHPのheader関数以外でリダイレクトを行う方法について解説します。header関数でエラーが発生したり、リダイレクトがうまく動作しない場合など、header関数以外でリダイレクトしたい場合のリダイレクト方法を紹介します。
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個と全角スペースは見た目で違いを判断しにくいですが、プログラム上では全く別物です。コンピューターが認識する文字コードが異なる為、関数のスペルミスと同じ扱いとなります。
エディターの機能でスペースの違いを可視化してみると判断しやすくなります。
また下記のサービスではソースコードを貼り付けることで、全角スペースや全角文字を検索することが出来ます。このようなサービスで全角スペースを探すのも良いかと思います。
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
タグを使ったリダイレクト方法については、下記で詳しくご紹介しています。
サンプルコードで実際のリダイレクトの動きを確認してみましょう。
HTMLのmeta
タグでもリダイレクトできる事が確認できました。こちらも画面のちらつきが少し気になります。
meta
タグでのリダイレクトの場合は、検索エンジンのクローラーがリダイレクト前のURLの評価を全て引き継ぐ保証が無いので、SEOに悪影響が出る可能性があります。
また、Web関連技術の標準化団体 W3C(World Wide Web Consortium)は2000年から使用しないことを推奨しています。metaタグでのリダイレクトも一時的なリダイレクト方法として活用される事をお勧めします。
まとめ
PHPでheader
関数以外の方法でもリダイレクトする事はできますが、あくまで一時的なリダイレクト方法になります。
恒久的なリダイレクトの場合はWEBサーバーのソフトウェア側でのリダイレクトの方が安心です。
SEO対策の考慮が必要ないWEBアプリケーション内であれば、画面のちらつきは気になりますが、問題なくリダイレクトできるので、使う場所と用途によって使い分ける事をお勧めします。