.htaccess概論

Updated / Published

Apache(アパッチ)について

.htaccess(ドットエイチティーアクセス)の前に説明しなければいけないのがApache(アパッチ)についてです。Apache(アパッチ)は、現在最も多く利用されているウェブサーバソフトウェアで、UNIX系OS や Windows などのマルチプラットフォームで動作します。フリーソフトウェアとして無償で公開され、誰でも修正・再配布することができるので、世界中のボランティアのプログラマたちの手によって開発されています。Apacheの特徴は、サーバの構成を必要な機能のモジュール単位で行え、機能の追加が容易におこなえること、また必要のない機能についても容易に削除することができるので、それぞれの用途にあった構成を組むことができます。

ウェブサーバソフトウェアにはApacheの他にもWindowsではMicrosoft Internet Information Services (IIS) や、フリーウェアかつオープンソースでマルチプラットフォームで動作し静的コンテンツ(サーバ上のファイル)を高速に配信するように設計されているnginxなどが有名です。本稿では.htaccessについての解説を扱うため、ウェブサーバがApacheの場合を対象としています。

Apache の設定ファイル

サーバソフトウェアに Apache を利用しているウェブサーバの動作設定は、httpd.conf というファイルに記述しますが、多くの場合、このファイルはウェブサーバの管理者しか編集することができません。主設定ファイルである httpd.conf にアクセスできない場合のために、Apache では .htaccess(ドットエイチティーアクセス)という分散設定ファイルが用意されています。

.htaccess を利用することで、たとえば、ウェブサーバの一部のスペースをレンタルしているサイト管理者の方でもウェブサーバの動作をディレクトリ単位で設定することができます。サーバの動作設定とは具体的には、 UA とウェブサーバとの間での通信時のHTTPを用いて、リダイレクトを行ったり、自作のオリジナルエラーメッセージを表示したり、特定のリソースへのアクセスを制限をかけるといったことができます。

ただし、.htaccess でどのような設定が行えるかはウェブサーバの管理者が編集する httpd.conf で制限されているため、サーバによっては許可されていない設定もあります。

分散設定ファイルの設定

この部分の内容はウェブサーバの管理者向けです。分散設定ファイルの .htaccess という名前は、httpd.conf内で AccessFileNameディレクティブを用いることでどのような名前(ファイル名)にでも指定できます。例えば、分散設定ファイルを .config という名前(ファイル名)にしたい場合は、主設定ファイル(httpd.conf)内で次のように設定することで可能になります。通常はデフォルトで.htaccessが用いられているというわけです。

AccessFileName .config

さらに、どのディレクティブが分散設定ファイル上でも有効にするかの設定も、主設定ファイル(httpd.conf)に AllowOverrideディレクティブで制御できます。たとえば、AllowOverride All で分散設定ファイルでも全てのディレクティブが利用でき、反対に AllowOverride None で分散設定ファイルによる制御を完全に無効化できます。

ALL, None の他に directive-type としてキーワードを指定することができ、AllowOverride AuthConfig Limit と記述した場合は認証に関するディレクティブとホストへのアクセス制御を行うためのディレクティブの使用を許可することを意味します。詳しくは Apache の AllowOverrideディレクティブの解説を参照ください。

なお、主設定ファイル(httpd.conf)を書き換えたあとはウェブサーバを再起動(例:service httpd restart)することで書き換えた設定を反映させることができます。

ウェブサーバの動作設定の反映順位

ウェブサーバの動作設定の反映順位は、まず主設定ファイルである httpd.conf に書かれている設定を有効にし、次に分散設定ファイルである .htaccess がある場合、.htaccess の設定が上書きされて反映されることになります。なお、.htaccess を複数記述している場合、その動作は上位から下位ディレクトリに向けて上書きして反映されます。つまり、制限をかけたいディレクトリに対して、動作設定を記述した .htaccess のファイルをアップロードする必要があります。ただし、分散設定ファイルである .htaccess でも一番上位ディレクトリにアップロードした場合は、それ以降のサブディレクトリにも同様の制御がかかります。

例えば、最上位ディレクトリにある .htaccess に画像関係のファイルへのアクセスを制限する設定が記述されていて、下位ディレクトリにある .htaccess でそのアクセス制限を解除する設定がない場合、その配下にアップロードされているすべての画像ファイルに対してアクセス制限がかかることになります。影響範囲が広くなるようなところで.htaccessを利用する場合は、非常に注意して扱わなければならない重要なファイルであることを理解しておかなければなりません。

.htaccess の使い方や注意点

.htaccess を扱うにあたっての基本知識(構文や注意点)を説明します。

設定ファイルの構文

Apache の設定ファイルであるhttpd.confや.htaccessに構文の間違いがあると、サーバエラーになるため、構文について厳格に理解しておく必要があります。

  • 1行に1つのディレクティブ(動作設定の命令文)からなります。
  • バックスラッシュ(\)はディレクティブが次の行に継続していることを示すために行の最後の文字として使われているかもしれません。行の最後とバックスラッシュの間に他の文字や空白があってはいけません。
  • 設定ファイルのディレクティブは半角アルファベットの大文字・小文字を区別しませんが、引数にはしばしば区別するものがあります。
  • ハッシュ(#)で始まる行はコメントと見なされて無視されます。設定ディレクティブの後の行ではコメントが含まれていてはいけません。ディレクティブの前の空行と空白は無視されますので、わかりやすくするためにディレクティブをインデントしても構いません。

.htaccessのリネームはリモートで行う

これはちょっとしたTipsとして紹介しますが、.htaccess という名前はドット(.)からはじまっているように通常のファイル名にあたる部分がなく拡張子だけで構成されてようなファイル名になっています。このためテキストエディタなどで「名前をつけて保存」を選択した際に、利用されているテキストエディタによっては、.htaccess として保存したはずが、勝手に .htaccess.txt のようにリネームされることがあります。これは利用されているテキストエディタでは拡張子がつけられていないものに対しては、".txt" などの拡張子を自動的につける設定になっているため .htaccess というファイルで保存することができないためです。

そのため、このような場合はローカルでは .htaccess.txt などのファイル名のままで保存しておき、FTP でウェブサーバ上に .htaccess.txt をアップロードしてから、ウェブサーバ側にあるファイルをリモート操作で .htaccess へとリネームするのが確実な方法です。