サイトリニューアルするときは忘れずに|301 リダイレクト

何かプリングルスの缶、ちょっと短くなってません?昨日そのことに気がついたフジカワです。

旧コンテンツへのアクセスもちゃんと引き継ぐ

リニューアルしてドメイン変わっても、変わらなくても、ディレクトリ、ファイルの名称変更、場所移動くらいはあるはず。
以前のサイトでお気に入りに登録してたユーザーや、いつもどおりの気分でやってくる検索ボット達が迷子にならないように、サイトをリニューアルしたら彼らを現行のサイトの該当コンテンツにナビゲートしてあげましょう。

ステップ1 「.htaccess」を有効に

レンサバをお使いの方はだいたいOKだと思いますが、たまにhtaccess使えないものもあります。その辺はレンサバ運営会社に問い合わせて、そこでダメなら終了です。このエントリーは意味を成しません。
httpd.confの設定変更ができる環境にある方は続けてどうぞ。
あ、今僕が書いてるエントリーの対象となる環境はCentOS 5.1です。
場合によっては若干細かい部分は異なるかもしれませんが、大枠では同じだと思うので、その辺はご勘弁を。

ターミナルから
vi /etc/httpd/conf/httpd.conf
で、httpd.confのファイルを設定変更します。
303行目前後から始まってると思います。

#
# This should be changed to whatever you set DocumentRoot to.
#
<directory "/var/www/html">

#
# Possible values for the Options directive are "None", "All",
# or any combination of:
#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important.  Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
    Options Indexes FollowSymLinks

#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
#   Options FileInfo AuthConfig Limit
#
    AllowOverride None

#
# Controls who can get stuff from this server.
#
    Order allow,deny
    Allow from all

</directory>

の、

AllowOverride None

AllowOverride All

に変更しましょう。
ちょっと上のほうに、

<directory />
    Options FollowSymLinks
    AllowOverride None
</directory>

というのもありますが、ディレクトリ全てに対して有効化するのはセキュリティー的な問題もありますので、htaccessの対象がhtml周りだけでよいのであれば、こちらはそのままにしておくのが良いでしょう。
これでhtaccessの有効化は完了です。

ステップ2.続いて301 リダイレクトの設定

基本は
Redirect(半角スペース)301(半角スペース)旧サイトのURLのドメイン以下(半角スペース)新サイトのURL
となります。
つまり、
旧URL:http://www.old.com/aaaa/bbbb.html
新URL:http://www.new.com/aaaa/bbbb.html
だとすると、
Redirect 301 /aaaa/bbbb.html http://www.new.com/aaaa/bbbb.html
となります。コレが基本。
場合によって色んな応用がありますが、まずはこれだけ覚えれば何とかなります。

まとめてやりたいじゃん

と言う人向けのアドバンス。察しが良い方は分かるかもしれませんが、
Redirect 301 / http://www.new.com/
とすることで、

http://www.old.com以下全てのURLはhttp://www.new.comに差し替えて表示させることができます。

ただし条件として、ディレクトリ構造、ファイル名、画像の置き場、その他全ての環境が新旧サイトでまったく同じ場合のみ通用します。

http://www.old.com/aaaa/bbbb/cccc.htmlでアクセスしたときに、

http://www.new.com/aaaa/bbbb/cccc.htmlに同じファイルがあればOKですが、ファイルが無い場合はエラーがでますのでご注意を。

Redirect 301 /aaaa/ http://www.new.com/xxxx/zzzz/
とした場合、

http://www.old.com/aaaa/bbbb.htmlは

http://www.new.com/xxxx/zzzz/bbbb.thmlにリダイレクトされます。

僕がハマッたポイントというか注意

ディレクトリまるごとのリダイレクト(「/」で切る)の場合と、同じディレクトリ内の個別ファイルを両方リダイレクトする場合は表記順に注意が必要です。
例えば
旧URL:http://www.old.com/aaaa/bbbb.html
新URL:http://www.new.com/xxxx/zzzz.html
などとなっている場合、
ディレクトリ構造を考えて「http://www.old.com/aaaa/」以下は全て「http://www.new.com/xxxx/」以下にリダイレクトさせたいというのが1点目、
個別ページ「http://www.old.com/aaaa/bbbb.html」を「http://www.new.com/xxxx/zzzz.html」にリダイレクトさせたいというのが2点目の要望だとしましょう。
その場合、まず、
Redirect 301 /aaaa/ http://www.new.com/xxxx/
という記述があり、次に
Redirect 301 /aaaa/bbbb.html http://www.new.com/xxxx/zzzz.html
という記述をすると思います。
さてどうなるか。
多分失敗します。
「http://www.old.com/aaaa/bbbb.html」にアクセスすると、
「http://www.new.com/xxxx/zzzz.html」ではなく、
「http://www.new.com/xxxx/bbbb.html」にリダイレクトされてしまうハズです。
なぜか?
ソースは上から読まれるからです。
まず、
Redirect 301 /aaaa/ http://www.new.com/xxxx/
とある時点でapacheは
「あ、はいはい、aaaaディレクトリだから新しいドメイン以下のxxxxディレクトリ以下にリダイレクトさせればいいのね、りょうかーい」なんつって、「www.old.com/aaaa/bbbb.html」を「www.new.com/xxxx/zzzz.html」ではなく、「www.new.com/xxxx/bbbb.html」にリンクさせてしまうのです。
じゃ、どうするのかというと、リダイレクトの記述の順番を変えてあげましょう。
先に
Redirect 301 /aaaa/bbbb.html http://www.new.com/xxxx/zzzz.html
を記述して、その後に
Redirect 301 /aaaa/ http://www.new.com/xxxx/
を書くのです。そうすると、
先に個別ページのリダイレクト指定が全て処理されてから、それ以外の「www.old.com/aaaa/以下のディレクトリに入ってるファイルをwww.new/xxxx/以下にリダイレクト」するという順番で処理されます。
つまり同一のディレクトリに関するリダイレクトの処理は、
Redirect 301 /aaaa/bbbb.html http://www.new.com/xxxx/zzzz.html
Redirect 301 /aaaa/cccc.html http://www.new.com/yyyy/cccc.html
Redirect 301 /aaaa/dddd.html http://www.new.com/yyyy/dddd.html
Redirect 301 /aaaa/eeee.html http://www.new.com/zzzz/eeee.html
Redirect 301 /aaaa/ffff.html http://www.new.com/zzzz/ffff.html
Redirect 301 /aaaa/ http://www.new.com/xxxx/
といった感じで書くことで、
「個別ページでイレギュラーな移動やファイル名の変更があったページはどこでも自由なページにリダイレクト」しつつ、かつ
「基本的にドメインとディレクトリが規則的に移動しただけのページはそれなりにリダイレクト」させることができるようになります。

ちょっと分かりづらいかしら

書いてる自分もだんだんパズルみたいになってしまって、
何を書いてるのか分からなくなった感もあります。
もしかしたらディレクトリやファイルの書き間違いがあるかもしれません。
でも書いている内容はある程度皆さんに伝わったと信じています(笑)。
後は自分の環境でやってみるしかありません。
一見複雑なような気がするかも知れませんが、やったらそうでもありません。
「はーん、そういうことね。最初からそう言ってよ」レベルです。

サイトをリニューアルした際は今まで積み上げたユーザーやアクセスを無駄にしないためにも是非301リダイレクトをやっておきましょう。
サイトのボリュームやリニューアル時の構造変化によっては工数はやや掛かりますが、やって損はしないと思います。むしろやらない事で見えないところで失うもののほうが多いと思います。

ではまた。

コメントいっこ

  1. [...] を使えるようにするための設定に関しては、下記のサイトが参考になります。 「httpd.conf」をメンテナンスできる環境の方は確認してみるといいでしょう。  http://blog.sugulab.com/?p=816     [...]

コメントを残してみる

コメント