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へのアクセス(/)ができなくなってしまうので、消した結果何も無くなった場合は、’/’にしとく。