php_flag not allowed here

php_flag not allowed here
のエラーが出た時は

“AllowOverride Options” もしくは”AllowOverride All” 権限が必要
.htaccessでphp_valueの定義を設定することが、このディレクトリでは
許可されていないとのこと。

このときピンとこなかったのでググったら、下のURLでこの話題が
出てました。

http://ns1.php.gr.jp/pipermail/php-users/2004-October/023917.html

なんか叱られてるし。。

で、PHPマニュアルにちゃんと載ってました。
–以下引用–
PHP を Apache モジュールとして使用している場合、Apache 設定ファイル
(例、httpd.conf) もしくは .htaccess ファイルにディレクティブを記述
することで、PHP の設定の変更を行うことが 可能です。
このようにして設定変更を行うには、”AllowOverride Options” もしくは
“AllowOverride All” 権限が必要です。
–ここまで–

ええ、たしかに俺のhttpd.confにはAllowOverride Options とか All とか
って設定はありませんでした。
あ、おれのブログはユーザディレクトリを使用してます。


AllowOverride FileInfo AuthConfig Limit
Options MultiViews SymLinksIfOwnerMatch IncludesNoExec



自分の設定を公開しちゃうのは問題あるような気もしますが、
まあいいや。
このAllowOverrideの次の行にあるOptionsってのは別物なんでしょうか。。
あとで調べます。。。

とりあえず本をよんだらAllowOverrideの主な引数(?)としては
上に書いてある、FileInfo AuthConfig Limitと、Options、All
None、Indexesくらいであるとのことでしたので、


AllowOverride All
Options MultiViews SymLinksIfOwnerMatch IncludesNoExec



こうしちゃいました。

ちなみにAllowOverrideは、直訳すれば上書き許可です。

ここに羅列した引数の分だけ、.htaccessで制御できます。
つまり、デフォルトならhttpd.confの設定が適用されるのに、
.htaccessで設定を変えてしまえる、だから上書きって言うん
でしょう。

AuthConfigがあればBasic認証とかが使えるようになるし、
Limitがあればホスト制限とかができるようになります。
FileInfoはerrorDocumentとかを設定できるようになります。
Allはもちろん全部使えるようにするわけで、
Noneだと.htaccessファイル自体無視するそうです。

ここで引数に書いたもの以外を.htaccessで定義すると、
内部エラー500番が発生します。