.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 の上書きを許可してやると,晴れてエラーが出なくなりました.