LoginSignup
39
35

More than 5 years have passed since last update.

phpでリダイレクト(301)

Last updated at Posted at 2015-05-20

突発的に、ほとんど知識のないphpでリダイレクト処理を記述することになり。
その時のメモ。

結果的に採用した記述内容

301を指定して、Locationにリダイレクト先のURL(絶対パス)を記述する。

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

記述内容について確認した点

  1. header関数より前に一切の記述がないこと(それ以降の記述はそもそも読み込まれない)
  2. 301の指定があること
  3. exitしていること(※ 2015/05/21追記)

(※ 2015/05/21追記)
✕「それ以降の記述はそもそも読み込まれない」
→ それ以降の記述も実行はされるので、「読み込まれない」は誤り。

すごく基本的な記述位置(上記 1.)に関することが分からなくて苦戦した。。
header関数の記述位置はDOCTYPE宣言よりもhtmlタグよりも前。

301と302

301は検索エンジンに蓄積されたデータも関連付けがされ引き継ぐことができるため、SEOを考慮すると重要。

  • 301 ・・・ 恒久的な移転(引越し)
  • 302 ・・・ 一時的な移転(いずれ帰ってくる短期・長期の旅行)

php以外のリダイレクト方法

時間の都合上phpで記述することがほぼ確定ではあったけど、一応それ方法以外も検討。

metaタグ(refresh)

遷移するまでの秒数を「0」にするとスパム判定がされペナルティがつけられるという説があり。
301, 302の指定もできないため、実装は手軽でリダイレクト自体の機能は十分に果たせるかもしれないが、広い目で見ると内容不十分。

<meta http-equiv="refresh" content="0(遷移するまでの秒数);URL=http://***.jp/">

.htaccess

301の指定も可能。
phpが1ページずつ個別に記述する必要があるのに対し、1ファイルにまとめて記述でき、
その内容もファイル別、ディレクトリ別など、より多岐にわたった指定が可能。

RewriteEngine on
RewriteRule ^***.html$ http://***.jp/***.html [R=301,L]

できることならリダイレクトは.htaccessで設定したかったな

設定内容の詳細度や管理面を考慮すると、
.htaccessで設定できるならそれに越したことがなさそうだな、という印象。

次回からもうちょっと先手打って検証しよう。。

39
35
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
39
35