Web 制作のことを中心に、ちょっとした Tips などを掲載しています。「自分用メモ」が基本スタンス。

btmup Blog

PHP

PHP で 301 リダイレクトするときの設定方法。

投稿日:

「リダイレクト」という言葉でまず思い浮かぶのは、「.htaccess」ファイルを使用した方法です。
ただ、レンタルサーバーなどでは、この .htaccess ファイルが使えなかったり機能を制限していたりするため、別の方法を準備しなければなりません。
そんなときに、次の候補として挙がるのが PHP によるリダイレクトです。

もちろん .htaccess のようにサーバー全体へ設定することはできないので、対象となるファイル(ページ)全てに反映していく必要があります。
そういう意味で使い勝手はあまり良くないのですが、まぁ、無いよりはマシってことで……。
(逆に、特定のページだけをリダイレクトしたい場合には、こちらの方が楽だったりします)

PHP によるリダイレクト方法

以下の内容を、リダイレクト元となるページのソースに書き込んでください。

<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://www.hogehoge.com/");
exit();
?>

まず、「header("HTTP/1.1 301 Moved Permanently");」で「301 リダイレクト」であることを設定します。

次に、「header("Location: http://www.hogehoge.com/");」で移転先の URL を設定。
実はこの URL 設定の1行だけでもリダイレクトはされるのですが、ステータスが 302 (一時的な移転)になってしまうとのこと。
恒久的な移転である場合は、ステータスを 301 に設定することをお忘れなく。

そして最後に、「exit();」で PHP の処理を終了します。
正直なところ、この 1 行が本当に必要なのか、よく分かっていません。
実際、PHP によるリダイレクトの方法を紹介しているブログなどでも、この 1 行は書かれていない方が大半です。
ただ、以前に一度だけ、上記の 2 行だけでは正常に処理されず画面が真っ白になり、「exit();」を追加したら改善した、というケースがありました。
それ以来、とりあえず入れるようにしています。

最初は 2 行だけにしておいて、うまく動かなければ「exit();」を付け足してみる、という使い方でも良いかも知れません。

【おまけ】HTML の meta タグによるリダイレクト(?)方法について

<head>~</head>に以下を記述することで、リダイレクト(のようなこと)ができます。

<meta http-equiv="Refresh" content="0; URL=http://hogehoge.com/" />

ただ、これは厳密に言うとリダイレクトではありません
この処理がされたとき、Yahoo! や Google といった検索エンジンが「リダイレクトであると見なす」というだけのことです。
Yahoo! ではこの処理をリダイレクトとして扱うことを明言していますが、Google からの公式なアナウンスはありません(以前に中の人がしていた発言はあるみたいですが)。

いずれにしろ、この方法も今はリダイレクトとして扱われていますが、検索エンジン側が「明日からリダイレクトじゃないよ。単なる転送だよ」と言ってしまえばそれまでな訳です。

なので、可能な限り .htaccess を使い、それがダメなら PHP を使い、それでもダメなら最終手段として meta タグを使う、というくらいの意識でいた方が良いと思われます。




-PHP
-, , ,

Copyright© btmup Blog , 2024 All Rights Reserved Powered by AFFINGER5.