Apacheの設定

2種類の設定ファイル

Apacheの設定は、次の2つのファイルで行います。

このうちhttpd.confは、既定では%ProgramFiles%/Apache Software Foundation/Apache2.2/conf/httpd.confにあり、変更を反映するにはApacheの再起動が必要です。一方で.htaccessは許可された任意の位置に置け、変更はリクエストされた時点で反映されます。

なおWindowsのエクスプローラーでは、.htaccessのように「.」から始まるファイル名に変更できません。そのときにはrenコマンドで処理します。

.htaccessの使用許可

.htaccessの使用には、AllowOverrideディレクティブによる許可が必要です。

AllowOverride All | None | directive-type [ directive-type ] ...
AllowOverride ディレクティブ - Apache HTTP サーバ
キーワード 説明
All すべてを許可
None すべてを無効
AuthConfig  
FileInfo  
Indexes  
Limit  
Options OptionsとXBitHackを許可

記述例

<Directory "C:/localhost">
  AllowOverride All
</Directory>

設定ファイルの記述方法

ファイルパス

Windows環境ではファイルパスにはスラッシュ (/) とバックスラッシュ (\) の両方を使用できますが、スラッシュのみを使用するようにします。

Unix 以外のプラットフォームでファイルのパスを入力するときは、 プラットフォームがバックスラッシュの使用を許していたとしても、 確実にスラッシュのみが使用されるように注意してください。一般的には、 設定ファイル全般でスラッシュのみを使う方が良いでしょう。

ErrorLog ディレクティブ - core - Apache HTTP サーバ バージョン 2.2

コメント

先頭にハッシュ文字 (#) がある行がコメントとみなされます。設定ファイルの構文 - 設定ファイル - Apache HTTP サーバ

# comment

#の前に記述することが許されるのは空白とタブのみで、他の文字は記述できません。よって行末コメントは認めらず、複数行のコメントもサポートされません

トラブル対処法

起動時のエラー

設定ファイルに誤りがあると、

  • The requested operation has failed!
  • ローカル コンピュータ の Apache 2.2 サービスを開始できません。エラー 1067: プロセスを途中で強制終了しました。
  • ローカル コンピューター で Apache2.2 を開始できませんでした。詳細情報はシステム イベント ログを参照してください。これが Microsoft 以外のサービスである場合は、サービスの製造元に問い合わせてください。その際、サービス固有のエラー コードが 1 であることを伝えてください。

のようなエラーと共に、Apacheの起動に失敗します。

このようなエラー表示だけでは原因を特定できないときは、httpd.exeをコマンドプロンプトから直接起動します。インストーラでインストールした場合には、これは%ProgramFiles%/Apache Software Foundation/Apache2.2/bin/にあります。結果は、

httpd.exe: Syntax error on line 531 of C:/Program Files (x86)/Apache Software Fou
ndation/Apache2.2/conf/httpd.conf: Cannot load C:/Program Files (x86)/Apache So
ftware Foundation/Apache2.2/php5apache2_2.dll into server:

のように出力され、エラー箇所と原因を確認できます。

500 Internal Server Error

設定ファイルの記述の誤り、もしくは読み込んでいないモジュールのディレクティブを使用した場合、サーバへのアクセス時に「500 Internal Server Error」が返されます。そのときログには「Invalid command '***', perhaps misspelled or defined by a module not included in the server configuration」などと記録されます。

IfDefineで開発環境と本番環境を分けているような場合、それが正しく機能していないと、環境の相違によりこのエラーとなることがあります。

応答が遅い

WindowsのApache 2.4では、初期設定のままでは応答が遅いことがあります。この場合には次の2行を追記して、ソケットの最適化を無効にします。 Apache server 2.4.6 hangs after serving requests from Internet Explorer 10/11 | Stijn de Witt's Blog Apache 2.4 on Windows responds slowly, hangs when serving some dynamic pages - Super User

AcceptFilter http none
AcceptFilter https none
AcceptFilter Directive - core - Apache HTTP Server Version 2.4

存在しないパスでアクセスされる

たとえば/test/here.htmlにファイルがあるとき、そのファイルに対して/test/here.html/a/test/here.html/a/bで、アクセスされることがあります。これはPATH_INFO (後続のパス名情報) 付きのリクエストを受け入れているためで、これを拒否すれば解決できます。存在しないURLでページが表示される場合がある - よくあるご質問 - さくらのサポート情報

無条件に拒否するには、

AcceptPathInfo Off

と、スクリプトを扱うファイルだけは受け入れるならば

AcceptPathInfo Default

とします。AcceptPathInfo ディレクティブ - core - Apache HTTP サーバ バージョン 2.2