犬ターネット

なんで /unko/index.php でも /unko/index.php/geri/123 でも動くの

2012-05-02 apache

さて、

/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みなくなったね。

ちわー泥棒でーす
windows7 で wget 使う