Apache用の設定ファイルはhttpd.confだけではなかった
XAMPPで.htaccessを利用すると500Errorになる場合の対処法を以前の投稿「WordPress、XAMPP、WindowsXPで.htaccessがエラーになる場合の対処法」で紹介しました。
Linux上でサーバを構築する際には必要のない設定がなぜXAMPPで必要なのか、腑に落ちなかったので調べてみました。
以前紹介した対処法
「C:\xampp\apache\conf\httpd.conf」の最終行にて以下の記述をすると「.htaccess」が正常に認識されます。
<Directory C:/xampp/htdocs/xampp> AllowOverride All </Directory>
そもそもAllowOverrideはDirectoryディレクティブに対し、設定の上書きを許可するかどうかを指定するオプションです。
手っ取り早くAllowOverride Allとすると記述したディレクトリ以下で「.htaccess」を使ったアクセス制御が可能になります。
「httpd.conf」を上から見ていくと、195行目あたり「<Directory />」にて一度「AllowOverride None」とされています。
その設定のすぐ後に「<Directory "C:/xampp/htdocs">」でAllowOverride Allが記述されているため、実質ドキュメントルートでの上書きを許可する形になっています。
その後ずっと下がって350行目あたり「<Directory "C:/xampp/cgi-bin">」にて再びAllowOverride Noneとなっているが、これはCGIプログラムのディレクトリなので通常のサイトには影響はないはずです。
以上でAllowOverrideに関する記述は終わリです。
ここである疑問が。
「なぜ最終行にAllowOverride Allを書かないと.htaccessによる制御が行えないのか?」
通常httpd.confの設定は下の行に記述すると上書きされます。そこで、どこかに怪しい挙動をする設定はないかなと1つ1つ見ていくと、460行目あたり気になる行を発見。
# XAMPP specific settings Include "conf/extra/httpd-xampp.conf"
「httpd-xampp.conf」の中を見てみると66行目あたりに以下の記述を発見
<Directory "C:/xampp/htdocs/xampp"> <IfModule php5_module> <Files "status.php"> php_admin_flag safe_mode off </Files> </IfModule> AllowOverride AuthConfig </Directory>
…こいつだ!
XAMPP用の設定ファイルがデフォルトで用意されているんですね。
XAMPPはサーバ環境を一括で設定するようになっていますが、やはりソフトごとに設定を理解しておかないと、いざという時に応用が効かないですね。
無事ここで「AllowOverride All」とすることで「.htaccess」が認識されるようになりました。