.htaccess に Options +ExecCGI で 500 になったとき

とある CGI を設置しようとしたら何故か意味不明の 500 エラー.

もしかしたらその原因は今から紹介するものかも知れません.

実験環境 : さくら VPS 512,Ubuntu 10.04 amd64,Apache2

拾い物の CGI の内容物にご丁寧に用意された .htaccess ファイル.その中に,CGI プログラムを動かせるように Options +ExecCGI という記述がされていた.しかしどうやらこれが原因で 500 が返って来るらしい (ここをコメントアウトすると大丈夫).

/var/log/apache2/error.log を確認すると

(前略).htaccess: Options not allowed here

とのこと.

これでググってみると次のメーリングリストのログが見つかった.

Apache-Users 2373 .htaccessのオーバーライドでnot allowed here
Apache-Users 2374 Re: .htaccessのオーバーライドでnot allowed here

で,思い立って /etc/apache2/mod-enables/userdir.conf を見てみる.

ちなみに,userdir モジュールを有効にしていて,今その CGI はそこに設置しようとしている前提です.

手前味噌ですが,userdir モジュールの使い方説明 (本文で主に説明してるのは別のことですが…) はこちら

<IfModule mod_userdir.c>
        ...
        <Directory /home/*/public_html>
                AllowOverride FileInfo AuthConfig Limit Indexes
                Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
                ...
        </Directory>
</IfModule>

AllowOverride に Options が無いですね.ということで,Options の設定を上書きしようとしてエラーになるわけです.

(前略)
                AllowOverride FileInfo AuthConfig Limit Indexes Options
(後略)

というように Options の上書きを許可してやると,晴れてエラーが出なくなりました.