2008年09月24日

.htaccessで301リダイレクト(サイトの引越し)

所有しているウェブサイトの、ディレクトリ移動(変更)、htmlファイル名変更などをする場合、.htaccessが有効です。

例:【/home/www/hoge/に構築したサイトを/home/www/hoge2/へ移動したい】

この場合、ただ新しいディレクトリへファイルを移して古いディレクトリのファイルを削除しただけでは、

せっかく今まで検索エンジンにインデックスされていたURLはクリックしても404エラーになってしまい、ユーザが移転先へ辿り着けない。
(検索エンジンにインデックスされるURLが旧URLから新URLに切り替わるまで時間がかかるため)

という弊害が出てしまいます。

もしサーバが.htaccessの利用を許可しているのであれば、こういった問題も起こさずにスムーズに移動できます。





例の場合であれば
1.
Redirect permanent /hoge/ http://mydomain/hoge2/

2.
RewriteEngine on
RewriteRule ^hoge/(.*)$ http://mydomain/hoge2/$1 [R=301,L]

などの書き方があります。
移動元のパス(hoge)はドキュメントルート(htmlファイルなどが置ける領域の最上層)からのパスになります。
.htaccessというファイルを作って1か2を書いて、ドキュメントルートにおけばOKです。
ただし、2の書き方はApacheのmod_rewriteが有効になっている必要があります。

今回私は
aaa_1.html、aaa_2.html、aaa_3.html、・・・

という規則でつけれられたhtml名の先頭にfoo_をつけました。

foo_aaa_1.html、foo_aaa_2.html、foo_aaa_3.html、・・・

この規則に従わないファイルも存在しているのですが、置き換えたのは上記規則に従ったファイルだけです。
このようにリネームをしてしまった場合、今まで検索エンジンにインデックスされていたファイルはサーバに存在しなくなってしまいます。
検索サイトの検索結果からaaa_1.htmlをクリックされた場合にfoo_aaa_1.htmlへ誘導するため、.htaccessを以下のようにしました。

RewriteEngine on
RewriteRule ^aaa_(.*)\.html$ http://mydomain/foo_aaa_$1.html [R=301,L]


mod_rewriteが有効になっていない場合、
RedirectMatch permanent
という記述方法(Redirect permanentの正規表現版?)でRewriteRule同様に書けるようですが、私の場合はうまく動いてくれませんでした。(なぜだろう・・・)


何かしら参考になりましたらクリックをよろしくお願いします
にほんブログ村 IT技術ブログへ   人気ブログランキング    
この記事へのコメント
こんばんは!ミミオでございます!

今日はちょちょちょっと…

むむむ難しい…

ので応援クリックだけ押して逃げまする。。。
Posted by ミミオ at 2008年09月24日
>> ミミオさん
いつもありがとうございます (_ _)
.htaccessでのリダイレクト処理というのは私もそんなに経験がなくて今回のRewriteRuleも初めてやったことです。
一見難しく見えますがぐぐれば大体やりたいことがそのまま検索結果に出てくることが多いという・・・^^;

Posted by トモヒロ at 2008年09月25日
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。