旧URLを互換させる方法について悩み中
過去に運用していたtDirayや旧BilboのURLは「?」を使ったパラメータ受け取りを利用していた。 新しいBilboは「?」を使わないのだが、「?」を使ったURLでもアクセスできるように互換性を保っておきたい。
今のstart.rbではこんな感じだが、
get '*' do
@entries = Entry.find('20')
haml :list
end
次のように直してみた。
# /?permalink&date=20070317 #=> permalink/20070317
# /?date=20070317#p03 #=> /20070317#p03
def redirect_to_new_path
if action = params.index(nil)
case action
when 'permalink'
redirect "#{action}/#{params[:date]}"
else
redirect action
end
else
if params[:date]
redirect "#{params[:date]}"
else
return false
end
end
return true
end
get '*' do
unless redirect_to_new_path
@entries = Entry.find('20')
haml :list
end
end
これで一応うまくいくんだけど、これをプラグインに追い出す実装が思いつかない。 getのマッチ条件に「?」が入れられるといいのだけど、これがどうやってもうまくいかない。
せめてSinatraのgetで定義したアクションをキャンセルして、以降のアクションからマッチするものを再び探すというようなことが出来るといいんだけど……。