btmup Blog

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

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
-, , ,

執筆者:


  1. roo より:

    1行でも書けます。

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

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

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

  2. kbysbtmup より:

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

  3. […] 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;); […]

comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

SOY CMS で記事の日付に曜日を日本語(漢字)で表示する方法。

[2011.08.03 追記 「$information[“create_date”]」の仕様変更、および、「strtotime」関数によるタイムスタンプへの変換についての記述 …

no image

SOY CMS で PHP を使えるようにする方法。

「そろそろ SOY CMS をちゃんと使いたいなー」ということで、レンサバを新しく一つ借りてとりあえずインストールしてみました。 誰かに見てもらう訳でもないので、とりあえず公開はしない方向で。 ドメイ …

no image

PHP情報の確認方法 – phpinfoの使い方。

PHPの動作環境・設定環境を確認するには、phpinfo()関数を使うと便利です。 使い方 まず、以下の一文を記載した新規ファイルを作成します。 <?php phpinfo(); ?> フ …

no image

ファーストサーバにWordPressをインストールする方法(というか準備)

マニュアルに載っているような一般的な内容は省略して、「文字化け対策」とその周辺の情報に焦点を絞ってまとめてみます。 »WordPressのインストール方法 諸々のバージョンやら WordP …

no image

SOY CMS で PHP を使って記事ごとに設定を任意で変えられるようにしているときに「cms:id」などが含まれている場合の対処法。

(2011.01.26:PHP の書き方を変更したコードを追記しました) 「新着情報」などのコンテンツをトップページやアーカイブで表示するとき、記事ごとに任意で設定を変えることがあります。 「重要!」 …