Sinatraで複数のルーティングにマッチすると先に宣言されたほうで処理が行われるけど、passを使うと次のルーティングに処理が引き渡される。 どのルーティングにマッチするかにはPATH_INFOが使われている*1ので、passする前にこれを書き換えることで全く別のルーティングに処理を引き渡すことができる。 get "/aaa" do request.path_info.gsub!("aaa", "bbb") pass end get "/bbb" do "Welcome to bbb!" end 実際はpath_infoだけでなく、pathとurlについてもgsub!を実行しておいたほうが安全そう。 あと、フィルターの実行条件が変わって、beforeはpass元(上での"/aaa")の条件で実行されるけど、afterはpass先(上での"/bbb")で実行されるので要注意。 追記 ルーテ