さくらレンタルサーバで.htaccessでmod_rewriteを利用してリダイレクトする

さて、nucleusからwordpressに引越しをしたわけですが、
なんといってもまずは(デザインもやりたいけれど)URLのリライトです。

こんなブログでも検索エンジンにインデックスされているページも結構あるし、
せっかく検索から来た人がコンテンツがない状態というのは、可哀想。

ということで、SEO的にもOKと言われている301リダイレクト(moved permanently)を利用して、
それぞれのページをリダイレクトすることにしました。

さくらのレンタルサーバ(スタンダード)を利用しているのですが、
これは.htaccessが利用できるとのことなので、.htaccessでやることにしました。

まず、URL体系なのですが、これまでnucleusを利用していた場合、

http://www.type5.org/blog/index.php?itemid=357

というURLで、index.phpにitemidというエントリごとにふられているパラメータを渡すことで個別のページの表示をしています。

一方、wordpressの場合デフォルトは

http://www.type5.org/wp/?p=123

になるのですが、「設定」-「パーマリンク設定」から

http://www.type5.org/wp/123

というパラメータ無しのURLに変更しています。
(なお、wordpressではデフォルトでブログディレクトリトップに.htaccessを生成し、
 それを管理画面からかんたんに編集できるようです。すごいねえ)

移行の際に、上記のパラメータ(nucleus上のitemidとwordpress上のentryid)を合わせようかと思ったのですが、wordpressはいろんなアクティビティ別にこのIDを発行するらしく、あわせるのは結構面倒くさい。(パラメータが合っていれば、上位ディレクトリの書き換えだけで済むので楽ですが)

という訳で、ちょっと力技なのですが、よくアクセスのあるTOP20くらいのURLを個別に移行先のURLにリダイレクトする方法を選択しました。

www配下に.htaccessを作成して、以下のように追記しています。

Redirect permanent /blog/ http://www.type5.org/wp/
RewriteEngine on
RewriteBase /blog
RewriteCond %{QUERY_STRING} (^|&)itemid=457(&|$)
RewriteRule ^blog/index\.php$ /wp/466? [L,R=301]
・・・

まず、これまで/blogで運用していたものを/wpで運用しますので、
/blogあてにアクセスが来た場合は、すべて/wpにリダイレクトします。(これも301)

次にRewriteEngineを利用する設定、リライトするベースURLを設定。

次(4行目)に、パラメータでリダイレクトする場合単純にRewriteRuleでは条件が決めれないらしいので、RewriteCondを使います。条件を追記していきます。
%{QUERY_STRING}はパラメータ(?)を、(^|&)itemid=457(&|$)は?itemid=457ではじまり、&のパラメータでしか終わらないという意味です。

続いて、ルールです。^blog/index\.php$ は^は行頭、index\.phpは.がエスケープされているだけ、$は行末を意味します。つまり、blog/index.phpに上記のパラメータつきで来た場合、次の場所(/wp/466?)にリダイレクトという意味ですね。(ここの?は重要で、?が無いとパラメータが引き継がれてしまうらしいです)

このあたりを参考にしました。(hatenaで聞くとこだったわ。。。w)

http://blog.btmup.com/seo/htaccess-301-redirect-per-page.html
http://webtech.akijapan.com/htaccess/rewrite.phtml
http://webcre8.jp/investigate/tips-htaccess-redirect.html
http://q.hatena.ne.jp/1341680846 (これがドンズバの情報でした!)

というわけで、めでたく、引越し完了しました! enjoy!