このブログとは別にもう一つブログがあるのですが、そちらに以前のサイトの中身を少しずつ移し替えています。
で、データ自体はコピペでいけるので順調に進んでいるのですが、問題はその後。
一応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」を書いておきましょう。
ここまでの参考サイト
- ミケネコの htaccess リファレンス - リダイレクト
- web2.0的ラボ - サイト引越し・移転 (301 リダイレクトの方法)
- wasnet.blog - .htaccess 301 リダイレクトでサイト移転
- Shoulder.jp - サイト(ドメイン)移転に伴うリダイレクト設定
- Web2.0ナビ - SEO的に301リダイレクトは是が非か?
クエリ付きページの場合(「○○.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の情報だったのは意外。単純な内容ほどネット上には出にくいのかも。