以前からこうなっていたのか記憶が定かではありませんが、
Catalystアプリケーションの
http://localhost:3000/test
にアクセスしたら、sub test内で
$c->req->path
を見ると
/%5E/[%5E%5C.]*(%5C?|%24)/test
になってしまっていました。これにはビックリΣヽ(゚Д゚; )ノ
この時、Apacheの設定は以下のように「パスに.(ドット)を含まないもの」をCatalystアプリケーションに飛ばすようにしていました。
<LocationMatch "^/[^\.]*(\?|$)"> SetHandler modperl PerlResponseHandler MyApp </LocationMatch>
この正規表現がプログラム側に渡ってしまっているようです。
(?:)で括ったら消えるかなと思ってやってみましたが何も変わらず。。。
仕方が無いので条件を逆転させることにしました。
<Location "/"> SetHandler modperl PerlResponseHandler Perlyst </Location> <LocationMatch "^/[^\?]+\..*"> SetHandler default-handler </LocationMatch>
LocationMatchの条件が間違っていたので修正
ひとまずこれで
$c->req->path
が
/test
を返すようにはなりました。
今あまり時間が無いので原因を詳しく調べることができません。ので、識者の方々の情報をお待ちしておりますm(_ _)m
追記
頂いたコメントを元に続きを書きました。
Catalyst::Request#pathの値に、LocationMatchでマッチした文字列がくっつく(2) - ヒルズで働く@robarioの技ログ