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

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

[読了時間の目安:約 4 分]

「リダイレクト」という言葉でまず思い浮かぶのは、「.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 タグを使う、というくらいの意識でいた方が良いと思われます。

Comments:2

roo 10-10-04 (月) 14:30

1行でも書けます。

header(“Location: http://www.hogehoge.com/“, true, 301);

> そして最後に、「exit();」で PHP の処理を終了します。
> 正直なところ、この 1 行が本当に必要なのか、よく分かっていません。

header() 以降に命令があった場合、exit してないと実行されてしまう可能性があるため明示的に記述しておいた方がいいです。
header() でリダイレクト命令を受け取って、リダイレクトするかどうかは、あくまでブラウザの実装に依存するからです。

kbysbtmup 10-10-04 (月) 15:53

>rooさん
補足情報、ありがとうございます。
やっぱり exit(); は入れておいた方が良いんですね。
勉強になりました。
(何で書いてない方が多いんだろう……)

Comment Form
Remember personal info

Trackbacks:1

Trackback URL for this entry
http://blog.btmup.com/php/php-301-redirect.html/trackback
Listed below are links to weblogs that reference
PHP で 301 リダイレクトするときの設定方法。 from btmup Blog
pingback from WordPressで404エラーをリダイレクトする方法 | 雑多余録 10-12-28 (火) 17:33

[...] PHPで301リダイレクトさせるときの設定方法。 http://blog.btmup.com/php/php-301-redirect.html header("HTTP/1.1 301 Moved Permanently"); header("Location: http://blog.restspace.jp/&quot;); [...]

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

リンク
フィード
メタ情報

このページのトップへ