過去記事の修正をちょっとずつ進めています。
当ブログは公開当初「PHPメモ」という名前で、PHPに関する記事ばかりを公開していたんですよね。今はWordPressを使ってますが、当時はSeesaaブログでした。
いつも忘れてしまうので、PHPで301リダイレクト、302リダイレクトをおこなう方法を書いておきます。
PHPで301リダイレクト
HTTPレスポンスコードを「301」とします。
<?php
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://example.com/");
exit;
</pre>
もしくは、header関数でステータスコードを指定してもOKです。
こんな書き方ですね↓
<pre class="language-php line-numbers"><code>
<?php
header("Location: http://example.com/", true, 301);
exit;
headerタグが動かなかった時などのために、念のためexitを記述しています。
PHPで302リダイレクト
302を明示的に指定しない場合は、「302」リダイレクト扱いとなります。
<?php
header("Location: http://example.com/");
exit;
「PHPマニュアル」に記載されている書き方
「PHPマニュアル」に記載されているリダイレクトの書き方を引用します。
void header ( string $string [, bool $replace = true [, int $http_response_code ]] )
<?php
// 301 Moved Permanently
header("Location: /foo.php",TRUE,301);
// 302 Found
header("Location: /foo.php",TRUE,302);
header("Location: /foo.php");
// 303 See Other
header("Location: /foo.php",TRUE,303);
// 307 Temporary Redirect
header("Location: /foo.php",TRUE,307);
【引用】PHPマニュアル – header https://secure.php.net/manual/ja/function.header.php
【参考】CakePHPでの301リダイレクト
CakePHPで301リダイレクトをする場合には、以下のような書き方で対応します。
<?php
$this->redirect('/example', '301');
「http://」から始めて、絶対パスを指定することも可能です。
今はいろんなPHPフレームワークがありますね。
【参考】 metaタグによる301リダイレクト
PHPではなく、HTMLのheadタグ内、metaタグでリダイレクトする場合の方法を書きます。
これなら、PHPなどのプログラムが分からない人でも対応できますね。
HTMLのheadタグ内に以下を記述してください。
「content」の値で何秒後にリダイレクトするかを指定します。
0秒の場合 | 301リダイレクト |
---|---|
秒数を指定した場合 | 302リダイレクト |
ただし、検索エンジンによっては正常に認識されない可能性もあるので、ご注意ください。
まとめ - 301リダイレクトと302リダイレクトとは?
301リダイレクトは、ページの変更やサイトの移転などでURLが恒久的に変更された場合の転送処理を行うステータスコードですね。
302リダイレクトは、一時的な転送の場合に使用します。
301リダイレクトであれば、被リンクなど元のページのSEO要因を引き継ぐとされていますので、SEO目的に合わせて慎重に使い分けるようにしましょうね。