btmup Blog

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

Web制作全般

PHPのページをWordPressのブログに301リダイレクトする。

投稿日:

このブログとは別にもう一つブログがあるのですが、そちらに以前のサイトの中身を少しずつ移し替えています。

で、データ自体はコピペでいけるので順調に進んでいるのですが、問題はその後。

一応Yahoo!やGoogleにもインデックスされているページなので、.htaccessで301リダイレクトをしようと思っていたのですが、なかなか一筋縄ではいかないもので。
PHPを使っているページが一部あり、その扱いに少々苦戦を強いられました。

というワケで、通常の(本来の)リダイレクトと、そうでないリダイレクトの方法を以下にまとめ。

基本のリダイレクト – 「Redirect permanent」を使う

基本的に、301リダイレクトは以下の書式で.htaccessファイルに記述すれば可能です。

Redirect permanent /old/ http://www.btmup.com/new/

「/old/」がリダイレクト元、「http://www.btmup.com/new/」がリダイレクト先です。
なんだか紛らわしいのですが、リダイレクト元はURLのルートからのパスを記載します(サーバーのフルパスとかではなく、大雑把に言えば「ドメインを省略」したもの)。
リダイレクト先は「http://〜」のURL全体を記載。

「permanent」が「301(完全な移動)」であることを伝えてくれるステータスになります。
もし「permanent」がなく「Redirect」のみだと「302(一時的な移動)」と解釈されてしまうので、サイトの移転などで二度と戻る可能性がない場合は、必ず「permanent」を書いておきましょう。

ここまでの参考サイト

クエリ付きページの場合(「○○.php?id=01」など) – 「Rewrite」を使う

僕が今回リダイレクトしたいページはクエリ(データを指定したりするための、「?」の後にある引数とかその数値)付きのPHPであるため、上記のような「Redirect」を使う方法ではうまく動作してくれません。

それ以外の方法を探したところ、「Rewrite」を使う方法を紹介しているページはすぐに多数見つかったのですが、如何せん正規表現がややこしいのなんの。
一つ試しては失敗、また別のものを試しては失敗、頓挫、挫折……ということをしばらく繰り返していました。

で、ようやく僕でも何となく書いていることの意味が分かるくらいの方法を発見!
それが以下です。

RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} ^id=(.*)$
RewriteRule ^old/index.php$ http://www.btmup.com/new/%1.html? [R=301,L]

これを.htaccessファイルに記述しておけば、例えば「http://www.btmup.com/old/index.php?id=01」にアクセスした場合、「http://www.btmup.com/new/01.html」にリダイレクトされます。

(分かる範囲で推測も含んだ)解説

1行目の「RewriteEngine on」でURLを書き替えできるようにします。
2行目の「RewriteBase」で書き替えのベースとなるパスを指定します。
3行目の「RewriteCond」でどうやらクエリ部分の処理をしているようで、変数への代入のようなイメージですかね。引数は「id=」とそのままですが、パラメータの部分に「(.*)」を書くことで後の処理に使えるようになるみたいです。
4行目の「RewriteRule」で、書き替えのルールを指定します。
「^old/index.php$」がリダイレクト元で、「RewriteBase」で指定したベースからクエリ手前までのパス。
「http://www.btmup.com/new/%1.html?」がリダイレクト先で、URL全体を記載しています。「%1」のところに「RewriteCond」で処理したクエリ部分が入ります。
最後の「R=301」で、「301リダイレクト」を指定します。「L」はよく分からないのですが、あとに書いた別のルールで二重に処理されないようにするためのものだと思われます。付けといて損はないと思います。たぶん。

とにかく動くことを最優先に調べた結果なので、詳しい意味などはあまり理解できていません。
もし応用するのであればもっと詳しく書かれたサイトがたくさんあるので、いろいろ調べてみることをお勧めします。

ここまでの参考サイト

ちゃんと301リダイレクトされているか確認しておく

とりあえずページが切り替わってくれたら一安心してしまうのですが、検索エンジン的にはそれだけでは不十分。
ちゃんと301になっているかどうか、念のため確認しておきます。

使うのは「View HTTP Request and Response Header」というツール。
リダイレクト元のURLを入力して「submit」ボタンを押すだけで簡単にチェックできます。

「HTTP Response Header」という項目で「HTTP Status Code: HTTP/1.1 301 Moved Permanently」と表示されていれば、ちゃんと301ステータスが返っています。

雑感

  • ちゃんと正規表現を勉強した方が良いのかなぁ。
  • 一番役に立ったのがmixiの情報だったのは意外。単純な内容ほどネット上には出にくいのかも。







-Web制作全般
-, , , , , , ,

執筆者:


  1. 創るmetaboy より:

    301リダイレクト:サイト引越しの際は必須。301リダイレクトなんだけど、動的URLからの遷移なんだな ・・・ 【今日のコマネタ】

     あるサイトの引越し作業。
     サイトを引越しする際、
      ・JavaScriptによる遷移 や<script type=”text/javascript”>
    <!–
    setTimeout(“GoToMove()”, 3 * 1…

  2. […] | superChemical ・PHPのページをWordPressのブログに301リダイレクトする。 | btmup Blog ・ここ数週間でやってきたことまとめ - […]

comment

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

関連記事

no image

最高の UX を提供する Web サイトやアプリを作るただ一つの方法。

とっても簡単なことです。 それは、ユーザーのことをちゃんと考えて作ること。 以上!

no image

Webサイト公開にあたってするべきことリスト。

Webサイトの制作が完了して公開するにあたって「これくらいはやっといた方がいいんじゃね?」と思うこと諸々。 書き留めておかないと忘れたり抜けたりしそうなので、まとめてみました。 やるべきことが増えれば …

no image

ファーストサーバでCGIが「505 Internal Server Error」になる問題。

久々、ファーストサーバネタです。 まぁ別にファーストサーバが悪い訳ではないんですし、ここに限った話でもないんですけど、なぜか色々ややこしいことになることが多いもんで。 今回は CGI の設置方法につい …

no image

ダミーテキストを自動生成する方法

こちら↓のページで、MS Office を使ったダミーテキストの自動生成方法が紹介されていました。 »ITmedia Biz.ID:オフィスソフトで100段落の“長文”ダミーテキストを自動 …

no image

Safari 4 は世界で最も早く最も革新的なブラウザ(らしい)。

昨日(2/24)、Safari 4 のパブリックベータ版がリリースされたそうです。 (ということを今朝のシステム会社の方との打合せで知りました) »アップル、Safari 4を発表 ? 世 …