今回は旧blogの記事をこのblogの記事にパーマネントリダイレクトしたいと思ったので調べてみました!
しかし、単純にリダイレクトしようと思っても馬鹿やったせいで記事番号がずれており、ドメイン部分を書きえるだけでは済みません;
これは大手術が必要そうだ…ということでmod_rewrite、ruby両先生にお願いしました
mod_rewriteといえばリダイレクト業界のスイスアーミーナイフに例えられる万能モジュールですが、書き換え処理をperl、php、rubyなどのプログラムに任せることも出来ます
まずはURL書き換え用のrubyスクリプトを書きます
[ruby]
#!/usr/bin/ruby
#入出力をバッファリングさせないため
$stdin.sync = 1
$stdout.sync = 1
#標準入力(記事ID)に14を足して出力
num = $stdin.gets
$stdout.puts num.to_i+14
[/ruby]
次に書き換え処理を行うプログラムファイルをRewriteMapで指定します
これは.htaccessファイルでは指定できません!なのでhttpd.conf(apache2.conf)に直接記述します
[apache]
RewriteEngine on
RewriteLock /tmp/map.lock
RewriteMap test prg:/path/to/faile/rewrite.rb
[/apache]
testというMap名でrewrite.rbを読み込ませます
rewrite.rbの変更を反映させるにはApacheに再読み込みさせる必要があります
これを実際にMapを使いたいディレクトリの.htaccessから、
[apache]
RewriteEngine on
RewriteBase /
RewriteCond %{QUERY_STRING} ^e=([0-9]*)(.*)$
RewriteRule ^index.php$ http://yusukezzz.dyndns.org/blog/archives/${test:%1|0}? [R=301,L]
[/apache]
${Map定義名:引数|引数のデフォルト値}のような形でMapを呼び出します
今回はRewriteCond %{QUERY_STRING}で記事IDを抽出してそれを渡しています
後は忘れずにR=301でパーマネントリダイレクトであることを指定します
以上、ちょっと大変でしたが無事リダイレクトに成功しました!
後は旧blogで使ってた画像のリンクが切れる場合があるのでsrcを絶対URL指定に変えなくては…