.htaccessとは?設置場所やリダイレクト、BASIC認証の書き方も紹介
.htaccess(ドットエイチティアクセス)を詳しくご存知でしょうか。
Webサイトの運用に携わる方ならおそらく、制作担当者に限らず、一度は見聞きしたことのある言葉だと思います。そうはいってもやはり、普段、仕事に直結しているかどうかで理解の度合いは異なるはずです。実際のところ、専門分野だと線引きし、先入観で難しく捉えている方もいらっしゃいます。
そこで本記事では、おさえておきたい「.htaccess」の基本について、設置場所や構文交えて解説。また、具体的にはリダイレクト、BASIC認証の書き方を紹介します。
目次
.htaccessとは?
.htaccessとは、Webサーバー(Apache)の基本的な動作をディレクトリ単位で指定できるファイルのことです。
主に、BASIC認証の追加や、IPアドレスによるアクセスの制限、404エラーページのリダイレクトなどが設定できます。サイトの安全性に寄与したり、利便性向上の作業を簡易化できたりと随所で役立つファイルです。
.htaccessをルートに設置すると、(.htaccess内に)記述された内容が、対象ディレクトリに加えその配下(のディレクトリ)にまですべて反映されます。
一方でディレクトリ単位での設定も可能ですが、公式では後述する「httpd.conf」での設定が推奨されています。
「.htaccess」と「httpd.conf」
Apacheで記述する場合、ファイルは「httpd.conf」です。「Directory」「DirectoryMatch」「Files」「FilesMatch」「Location」「LocationMatch」……等々のディレクティブと呼ばれる命令とその値を指定することで目的に応じた設定ができます。なお、こちらはサーバー管理者しか編集できません。
.htaccessでディレクトリ単位の制御を行う際、先述の通り、基本はhttpd.confで設定します。しかし、httpd.confの編集を行う為に必要なルート権限が無いケースや、httpd.confの編集を頻繁に行いたくないのであれば、httpd.conf にて .htaccess の使用が許可されている場合に限って.htaccessが使用可能です。
ちなみに、httpd.confと.htaccessは読み込み回数に違いがあります。前者は、Apacheの起動時に1回読み込まれるだけです。対して後者はアクセスごとにファイルが読み込まれます。
.htaccessの作成方法
.htaccessは、メモ帳などのテキストエディタで作成します。使用できる文字コードは、BOMなしのUTF-8のみです。改行コードには、LFを用います。なお、文章の最後には必ず改行が入ります。
※BOMとは、バイトオーダーマーク(Byte Order Mark)の略で、(文字コードで)符号化したテキストの先頭に付与される数バイトのデータを指します。
※LFとは、ラインフィード(Line Feed)の略で、 文字の入出力位置の改行(次行の同じ位置への移動)を指す制御コードの一つです。
メモ帳のファイル名は作成前であれば特に決まりはありません。
作成後、該当売るファイルをサーバーにアップロードした時、ファイル名を「.htaccess」に変更し、はじめて有効化されます。
.htaccessの設置場所
.htaccessの設置は複数でも構いません。ただし、ファイルを設置する場所によってサーバーを制限できる範囲は変わります。
主な要点は、対象ディレクトリの下層ページにも記述した内容が反映されることです。
繰り返しますが、ルートに設置した場合はその配下すべてを制御できます。
逆にいうと、その上や同列にある階層は該当しません。
また、下層に別の.htaccessを置くことも可能です。仮に異なる記述内容で同じページへの指示があった場合は、より階層の深いページに置いた.htaccessの内容が優先して実行されます。
.htaccessでリダイレクトを設定する書き方
.htaccessでは、リダイレクトを設定できます。リダイレクトとは、とあるページにアクセスしたユーザーを指定のページに移動させることです。
書き方は以下のフォーマットに倣ってください。
ステータスは、主に301リダイレクトに該当する“permanent”か、302リダイレクトの“temp”を使用します。たとえば、サイトの移転やSSL化の設定を行った場合はpermanentを指定しましょう。他方、一時的にサイトを振り分けたい場合は、tempを指定してください。
転送元のURLは、/(スラッシュ)から始まるルートパスを記述します。そして転送先URLに書くのは、httpsから始まる絶対パスです。
したがって、現在のWebサイトを301リダイレクトでhttps://newsite.com/に転送させたい場合の書き方は、次のようになります。
また、サーバーにmod_rewriteの機能が備わっていれば、<IfModule mod_rewrite.c></IfModule>で囲み、「RewriteEngine on」の構文を書くことでも設定可能です。
.htaccessでリダイレクトを設定すれば、404エラーが発生したときの表示を任意のページに変更可能することもできます。書き方は、以下の通りです。
Googleは、有益な404エラーページの作成を推奨しています。SEOへの意識とあわせて、ぜひ活用してみてください。
その他、リダイレクトの設定では、ドメインにおけるwwwの有無の統一などもできます。以下、手順です。
まず「RewriteEngine on」の構文で書き換えの開始を命令します。
次に「RewriteCond」で書き換えの対象となるドメインを指定しましょう。その際、ドメインの前に%{HTTP_HOST} 、ドメインの後ろに [NC] を記述します。%{HTTP_HOST} はホスト名を表す変数、 [NC] は大文字と小文字を区別しないフラグです。
最後に、「RewriteRule」で統一されるドメインを指定、末尾に[R=301,L]すれば完了です。
[R=301,L]は、301リダイレクトでの処理と、処理自体の終了を意味します。
www有りに変換する場合は次の通りです。
RewriteCond %{HTTP_HOST} ^example\.com [NC]
RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
なお、301リダイレクトについてはこちらの記事でも詳しく解説しています。
.htaccessで行う特定のIPアドレス、ホスト名からのアクセス制限
IPアドレスやホスト名をフィルタリングし、アクセス制限することも.htaccessから行えます。たとえば、特定のWebページに対して社外からのアクセスを遮断することなどが可能です。
また、対象はピンポイントに指定できるため、迷惑行為やスパムの対策にも有効に作用します。
アクセスを拒否する場合の書き方は以下の通りです。
allow from all
deny from 111.222.111.222(※IPアドレス)
deny from example.ne.jp(※ホスト名)
アクセスを許可する場合の書き方は以下の通りです。
deny from all
allow from 111.222.111.222(※IPアドレス)
allow from example.ne.jp(※ホスト名)
両者、書き始めから異なります。
拒否を設定する前者(order allow,deny)では、orderの後は許可(allow)→拒否(deny)の順です。続けて「allow from all」で一旦すべてを許可し、改行後、特定のIPアドレスやホストに対してアクセスを拒否(deny)するよう指定します。
後者(order deny,allow)はその逆です。拒否(deny)→許可(allow)の順に記述した後で、すべて拒否し、改行後、アクセスの許可(allow)を指定します。
.htaccessで行う特定のファイルへのアクセス制限
.htaccessでは、特定のファイルへのアクセスを制限することができます。「.htpasswd」や掲示板やアクセス解析CGIなどが出力するログファイルなどは、ブラウザから直接閲覧可能です。そのため、第三者に編集されないためには、ファイルを保護する必要があります。
たとえば、example.htmlというファイルへのアクセスを制限する場合の記述形式は以下の通りです。
“Deny from all”と書くことによって、example.htmlへのアクセスをすべて拒否できます。
なお、.htaccessは該当ファイル(この場合、example.html)と同じ階層であることが条件です。
.htaccessで行うBASIC認証の追加
アクセス制限にはBASIC認証という手段もあります。Webサイトだけでなく、ディレクトリ、ファイル、ユーザー単位での設定も可能です。
基本的には次のように書きます。
AuthGroupFile /dev/null
AuthName “Input ID and Password.”
AuthType Basic
require valid-user
上記の.htaccessファイルとは別にユーザー名とパスワードを記述する.htpasswdファイルも準備します(書式はユーザー名:パスワード)。
記述するパスワードの文字列は暗号化が必要です(.htpasswd生成 に便利なサイトはこちら)。
また、作成した.htpasswdは、.htaccessと同じディレクトリに設置するようにしましょう。
BASIC認証は、サイトを公開する前の段階で、クライアントや関係者のみがアクセスできる状態にしておくために使われることが多いです。また、有料コンテンツなど、特定の条件を満たしたユーザーのアクセスのみを許可する際にも活用されます。
加えて、ページをGoogleにインデックスされたくない場合にも使えます。BASIC認証を追加すれば、IDとパスワードによってクローラーを遮断することが可能です。
.htaccessを設定する際の注意点
.htaccessを設定する際にはいくつか注意点があります。
たとえば、以下の通りです。
- 使用できるサーバー用ソフトウェアはApacheのみ
- サーバー管理者の使用許可が必要
- 設置したディレクトリより上の階層では反映されない
そのほか当然、記述ミスがあってもいけません。この時“500 Internal Server Error”が表示されます。スペルミスだけでなく文字コードや改行コードにも気を付けましょう。
.htaccessは、日本語を含めることができますが、挙動に関しては不安定な印象を覚えます。よほど特別な事情がない限り、用いるのは半角英数字や記号にしてください。
#を使ってコメントを残すことができます。複数人で.htaccessを編集する場合は便利です。ただし、#を付け忘れるとそのまま反映されてしまうため、慎重に扱いましょう。
ファイル名の頭文字を(ドット)にした場合、保存できない可能性があります。最初から名称を「.htaccess」にせず、まず「htaccess.txt」など、環境に依存しない形でサーバーに保存することがおすすめです。その後、サーバー上で変更するようにしましょう。
.htaccessの基本構文を知ったうえで、実際に書くことが大事!
.htaccess上では、リダイレクトの設定や、BASIC認証の追加など、サイトの挙動を設定することができます。テキストファイルで編集できる手軽さも魅力的です。
ただし、適切な書き方を知らなければ、うまく反映されません。サイトが表示されないとなると、サイトの価値は下がります。したがって、設定には細心の注意を払いましょう。
一方で、基本構文を知れば、後はケースバイケースで当てはめるのみです。慣れないうちは記述ミスもあるかもしれませんが、やはり習得するためには手を動かすことが大事だと考えます。
ぜひ、慎重かつ積極的に取り組んでみてください。
RANKING ランキング
- WEEKLY
- MONTHLY
UPDATE 更新情報
- ALL
- ARTICLE
- MOVIE
- FEATURE
- DOCUMENT