ディレクティブ (directive)

ディレクティブが使用可能な場所

ディレクティブには使用できる場所の規定があり、それ以外の場所で使用するとサーバが動作しなくなることがあります。

区分  
サーバ設定ファイル 以下のファイル内
  • httpd.conf
  • srm.conf
  • access.conf
バーチャルホスト サーバ設定ファイル内の、以下のコンテナ内
  • <VirtualHost>
ディレクトリ サーバ設定ファイル内の、以下のコンテナ内
  • <Directory>
  • <Location>
  • <Files>
  • <Proxy>
.htaccess 以下のファイル内

ディレクティブの禁止

特定のディレクティブの使用を、明示的に禁止できます。

AllowOverride All|None|directive-type [directive-type] ...
AllowOverride ディレクティブ - core - Apache HTTP サーバ

Allを指定するとすべてのディレクティブが許可され、Noneではすべてが禁止されます。ディレクティブを個別に許可/禁止するには、許可するディレクティブを列挙します。レンタルサーバなどでこの設定がされていると、特定のディレクティブが使用できないことになります。

適用範囲の設定

ファイル名による区別

filenameに一致したファイルにだけ、<Files>セクション内のディレクティブを適用させます。filenameはファイル名かワイルドカード文字列です。

<Files filename> ... </Files>
<Files> ディレクティブ - Apache HTTP サーバ

ファイル名を正規表現で指定したいならば、<FilesMatch>ディレクティブを使います。

<FilesMatch regex> ... </FilesMatch>
<FilesMatch> ディレクティブ - Apache HTTP サーバ

なお、<Files ~ regex>のように<Files>で正規表現を使用することも可能ですが、<FilesMatch>を使用することが推奨されています。

開発環境と本番環境による区別

開発環境と本番環境で異なる設定を適用するには、次のような方法があります。

  1. Apacheの起動時に定数を定義して、<IfDefine>で判別
    【apache】.htaccessで本番環境設定とテスト環境設定を条件分岐で切り替え at softelメモ
  2. 使用されているModuleの違いを利用して、<IfModule>で判別
    【apache】.htaccessで本番環境設定とテスト環境設定を条件分岐で切り替え その2
  3. httpdのバージョンの違いを利用して、<IfVersion>で判別
    【apache】.htaccessで本番環境設定とテスト環境設定を条件分岐で切り替え その3

1番目の方法について解説します。

まずApacheの起動時に定数を定義するには、それをWindowsのサービスとして起動しているならば、レジストリを書き換える必要があります。[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Apache*.*]のImagePathがそれで、この値の末尾に[-D TEST]のように追記します。この設定を有効にするには、ここでサービスを再起動します。

次に.htaccessでは、<IfDefine>で

<IfDefine TEST>
    # 開発環境での設定
</IfDefine>

<IfDefine !TEST>
    # 本番環境での設定
</IfDefine>

のように記述することで、開発環境と本番環境で異なる設定を適用できます。