Apacheの設定は、次の2つのファイルで行います。
このうちhttpd.confは、既定では%ProgramFiles%/Apache Software Foundation/Apache2.2/conf/httpd.confにあり、変更を反映するにはApacheの再起動が必要です。一方で.htaccessは許可された任意の位置に置け、変更はリクエストされた時点で反映されます。
なおWindowsのエクスプローラーでは、.htaccessのように「.」から始まるファイル名に変更できません。そのときにはrenコマンドで処理します。
.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
#の前に記述することが許されるのは空白とタブのみで、他の文字は記述できません。よって行末コメントは認めらず、複数行のコメントもサポートされません。
設定ファイルに誤りがあると、
のようなエラーと共に、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」が返されます。そのときログには「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 noneAcceptFilter 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