Windows + Apache で shebang 行に関係なくレジストリの設定で CGI を実行する。

遊びで CGI スクリプトを書いてたんだけど、ローカル環境からサーバーにアップロードする時にいつも shebang を書き換えるのを忘れるので、ローカル環境(Windows XP)では shebang を見ないように Apache 2.2 を設定してみた。

1. Apache に拡張子をみて実行するように設定する
httpd.conf にも書けるみたいだけど、なんとなく .htaccess で設定した。
多分 httpd.conf の各ディレクトリの設定でも同じ内容で OK だと思う。

ScriptInterpreterSource Registry-Strict

これで shebang を見ずに拡張子を見てレジストリを探しに行くようになる。


2. レジストリインタプリタのパスを書き込む
なんかエクスプローラーの「ファイルの種類」からの関連付けで設定できるみたいな事が書いてあるサイトがあったけど出来なかったので、別のサイトを見て手動でレジストリに設定した。
レジストリのキーは拡張子 .cgi なら
HKEY_CLASSES_ROOT\.cgi\shell\ExecCGI\command
レジストリのキーは拡張子 .rb なら
HKEY_CLASSES_ROOT\.rb\shell\ExecCGI\command
レジストリのキーは拡張子 .pl なら
HKEY_CLASSES_ROOT\.pl\shell\ExecCGI\command
みたいな感じ。
拡張子までしか無かったので、この位置までキーを掘った。
この中の (既定) になってる REG_SZ 型のデータとして各インタプリタのフルパスを書けば OK だった。
参考にしたサイトでは REG_EXPAND_SZ (多分『展開可能な文字列値』)でと書いてあったけど普通の REG_SZ で問題なしだった。


これでサーバー用の shebang が書いてあるスクリプトが無事に動きましたとさ。
ダメな場合は .htaccess がちゃんと有効になってるかどうかとか、Apache とかのバージョンが違わないか(確認したのは 2.2 だけ)とか、レジストリの位置間違ってないかとかみるといいかもね。


じゃーねー(Chikirin風?)