.htaccessの書き方

.htaccess ファイルの作成方法や、設置する場所、 .htaccess に記載した設定が影響する範囲や階層ごとに異なる .htaccess が設置されている場合の優先順位など .htaccess の基本的な書き方について解説します。

(Last modified: )

.htaccessとは

Apache に関する設定は httpd.conf ファイルにて行いますが、このファイルは管理者権限を持つユーザーしか編集することができません。例えば Apache をレンタルサーバのように複数のユーザーに提供している場合、ユーザーが自分の管理しているディレクトリに対して設定を行おうとしても httpd.conf を直接編集することは通常許可されません。

そこでユーザーが管理しているディレクトリに対してだけ適用される設定を、ユーザー自身が編集できるようにしたものが .htaccess ファイルです。ユーザーは自分で .htaccess ファイルを作成し必要な設定を記述した上でユーザーが管理しているディレクトリに設置すると、設置したディレクトリおよび下位のディレクトリに対して .htaccess に記述した設定が適用されます。

ただ何でも好きな設定を .htaccess に記述できるわけではありません。どのディレクトリに対してどんな設定を .htaccess で設定可能なのかを httpd.conf ファイルにて AllowOverride ディレクティブを使って事前に設定しておく(管理者に依頼して設定してもらう)必要があります。

.htaccess で設定できる項目はすべて httpd.conf ファイルの Directory ディレクティブに対して設定することが可能です。よって .htaccess を利用する明確な理由がなければ .htaccess を使用する必要はありません。

.htaccessの作成

.htaccess ファイルはテキストファイルです。新しく作成する場合はテキストエディタで新しいファイルを作成し、ファイル名として .htaccess として保存してください。( AccessFileName ディレクティブに設定することでファイル名は変更することもできます)。

作成したテキストファイルに httpd.conf ファイルに記述するのと同じように設定を記述していきます。

SetEnvIf Referer www\.example\.com my_referral
Require env my_referral

コメントを記述する場合は行の先頭に # を記述してください。その行がコメントとなります。

# 環境変数が定義されている場合だけアクセスを許可
SetEnvIf Referer www\.example\.com my_referral
Require env my_referral

テキストエディタで上記の内容を記述し、 .htaccess というファイル名で保存します。

.htaccessの作成(1)

.htaccessのアップロード

作成した .htaccess は他の HTML ファイルなどと同じように対象となるディレクトリにアップロードしてください。

.htaccessの作成(1)

※ ローカルの環境でファイル名がドット(.)から始まるファイルを作成できなかったりする場合は、別の名前で作成しサーバへアップロードしてからファイル名を変更されてください。

.htaccessの設定が影響する範囲

.htaccess ファイルに記述した設定は、 .htaccess ファイルを設置したディレクトリおよび下位のディレクトリで適用されます。

.htaccessの設定が影響する範囲(1)

あるディレクトリに適用される設定は、 httpd.conf ファイルに記述された設定に加えて、自分自身のディレクトリおよびその上位のディレクトリに設置されている .htaccess に記述された設定が適用されます。

/ ディレクトリ
/.htaccess が適用

/img ディレクトリ
/.htaccess と /img/.htaccess が適用

/img/sp ディレクトリ
/.htaccess と /img/.htaccess と /img/sp/.htaccess が適用

複数の .htaccess が適用されるディレクトリの場合に、どの設定が適用されるのかについてはこのあと解説します。

複数の.htaccessが適用される場合の優先順位

あるディレクトリに .htaccess が設置されている場合に、そのディレクトリの上位の階層にあるディレクトリにも .htaccess が設置されている場合、複数の .htaccess が適用されることになります。それぞれの .htaccess に競合しない設定が記述されていた場合はどちらの .htaccess に記述されている設定も有効となりますが、競合する設定が記述されていた場合はより下位のディレクトリの .htaccess に記述された設定が有効となります。

次の例では / に設置された .htaccess と、その下位ディレクトリの /img に設置された .htaccess の設定内容です。

/.htaccess

Options +Indexes
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

/img/.htaccess

ErrorDocument 404 404.html
Options -Indexes

/img ディレクトリにはどちらの .htaccess も適用されますが、 Options ディレクティブに関する設定がどちらの .htaccess ファイルにも記述されています。この場合は、より下位のディレクトリにある /img/.htaccess で記述されている Options -Indexes が有効となります。結果的に /img ディレクトリには次のような設定が有効となります。

RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]
ErrorDocument 404 404.html
Options -Indexes

-- --

.htaccess の基本的な書き方について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。