さて、
/unko/index.php /unko/index.php/geri/123
のどっちでも /unko/index.php が動くんだけど、なんでかなあと疑問に感じたまま放置してたので調査。
まず、この機能は Apache の AcceptPathInfo ディレクティブによるもの。
このディレクティブは実際のファイル名 (もしくは存在するディレクトリの 存在しないファイル) の後に続くパス名情報があるリクエストを受け付けるか拒否するかを制御します。続きのパス名情報はスクリプトには PATH_INFO 環境変数として利用可能になります。
このディレクティブは On|Off|Default のどれかを設定できて、ディフォルトだと Defalut が設定されている。Defaultっつうのは以下の意。
続きのパス名情報の扱いはリクエストの ハンドラで決まります。普通のファイルのためのコアハンドラのデフォルトは PATH_INFO を拒否します。cgi-script や isapi-handler のようにスクリプトを扱うハンドラは 一般的にデフォルトで PATH_INFO を受け付けます。
つまり、ディフォルトだと、普通のファイルの場合は無効で、.phpとか.cgiだと有効になってるっつう。
だから、httpd.conf とか .htaccess に
AcceptPathInfo On
って記述しとけば、
/unko/test.html /unko/test.html/geri/123
のどちらでもアクセスできるし、環境変数の PATH_INFO も利用可能になる。
つうか最近、このタイプのURLみなくなったね。