Amon2で最後/(スラッシュ)ありなしを吸収してDispatchする時のメモ。
2015年1月17日
アプリじゃなくてNginxとかApacheでやってもいいんですけど、オレオレFlavorに入れとけばいいかなと。
use MyApp::Web::Dispatcher; get '/' => 'Root#index'; get '/hoge' => "Hoge#index"; 1;
上記みたいなDispatcherを書いた場合、
/hoge
へアクセスすれば、該当のController(Hoge->index)が呼ばれるんですが、これを
/hoge/
と最後にスラッシュが付いた状態でアクセスすると404になってしまうんで、BEFORE_DISPATCH(Dispatcherが呼ばれる前)でなんとかする。
package MyApp::Web; __PACKAGE__->add_trigger( BEFORE_DISPATCH => sub { my $c = shift; if ( $c->req->env->{'PATH_INFO'} =~ /\/$/ ) { $c->req->env->{'PATH_INFO'} =~ s/\/$//; unless ( $c->req->env->{'PATH_INFO'} ) { $c->req->env->{'PATH_INFO'} = '/'; } } } );
BEFORE_DISPATCHで、PATH_INFOから最後の/を消し去るだけです。
で、Room->indexへのアクセス(/)ができなくなってしまうので、消した結果何も無くなった場合は、’/’にしとく。