今回は、レンタルサーバーの設定をする時に必ずと言っていいほど話題になる「.htaccess」ファイルについて調べてみました。
.htaccessとは何か?
ApacheというHTTPサーバサービスが利用する「ファイル」です。
もっと言うと、HTTPサーバーサービスがどんな振る舞いをするのか設定する「設定ファイル」です。
Apacheとはサーバ上で起動しているHTTPサービスを提供しているソフトウェアです。
下の図はApacheのイメージ図ですが、利用者(クライアント)の要求に対して、ホームページを利用者のブラウザに提供しているサーバーサービスです。
Apache(HTTPサービス)がブラウザにホームページを返すので私たちは「Google Chrome」や「Internet Explorer」や「Firefox」を使ってホームページを閲覧できます。
そして、Apache にどのような動作をさせるのか定義する「.htaccess」ファイルは、各ディレクトリに分散しているので「分散設定ファイル」とも呼ばれます。
なぜ「.htaccess」ファイルはいろんなところに分散しているのか?
たとえば上図のように「山田さん」「佐藤さん」「鈴木さん」の3人がレンタルサーバーを利用しているとします。
当然レンタルサーバーには複数人の人がサイトを作り、HTTPサーバーサービスを利用しています。
そしてそれぞれの利用者が独自の設定を入れたいときがあります。
たとえば、山田さんはCGIでプログラムを作りたい、でも佐藤さんはCGIプログラムを利用しないし、セキュリティの観点からCGIプログラムを禁止したい。
そんな時、HTTPサービスで一括して設定できません。
あっちを立てればこっちが立たずという状態になります。
だから「.htaccess」を使って、「山田さん用の設定」と「佐藤さん用の設定」を分けることで柔軟に、個別に独自の設定を入れることができます。
.htaccessはそのディレクトリ以下のディレクトリに対して機能する
.htaccessファイルを置くディレクトリがあったとして、.htaccessは、そのディレクトリ配下のディレクトリに対して機能します。
逆に上のディレクトリに対しては影響しません(機能しません)。
だから細かく設定することが可能です。
例えば、「このディレクトリにはプログラムが置いてあるので、この機能を追加しよう」、「このディレクトリには個人情報を置いているのでセキュリティを強化しよう」などとディレクトリごとに設定できます。
.htaccessで何を設定するのか?(何が設定できるのか?)
「.htaccess」で以下の設定ができます。
※詳しい設定方法はこの後解説します。
- 別のURLに転送する(リダイレクト)
- ディレクトリに対してアカウントIDとパスワードを設定しアクセス制限
- インデックスファイル名を設定する
- インデックスファイルがないとき、ファイル一覧を表示させずに任意のエラーページを表示させる
- ファイル一覧(Index of)を隠す
- 特定のIPアドレスや特定のリモートホストを指定してアクセス制限(アクセス許可、アクセス拒否)
「.htaccess」ファイルの記述方法
まず初めに、.htaccessファイルの記述にはいくつかのルールがありますので整理しましょう。
「.htaccess」の基本ルール
- #から始まる行は、コメントとしてHTTPサーバーに認識されない。
- 1行に1つの設定をする。
- Apacheの設定ファイル「httpd.conf」ファイルを設定できるなら、なるべく「.htaccess」ファイルをいじらない
別のURLに転送する(リダイレクト)
たとえば、「http://example.com」にアクセスしたときに、「http://new-example.com」に転送させることができます。
なぜこんなことをするのかと言いますと、新しいドメインに移行したけど、以前からのユーザーにも新しいドメインにアクセスしてほしいなど「サイトの引越」をした時などに使います。
「http://example.com」にアクセスしてきたら「http://new-example.com」へ転送したい場合は、「.htaccess」ファイルに以下のように記載します。
RewriteEngine on
RewriteCond %{http_host} ^example.com
RewriteRule ^(.*) http://new-example.com/$1 [R=301,L]
これで自動的に「http://new-example.com」へ転送されるようになります。
この「リダイレクト」の設定は
- サイト全体の転送
- ディレクトリ単位での転送
- ページ単位での転送
- 1画面に集約する転送
など多数あります。
詳しくは今後別ページで「リダイレクト」だけを特集したいと思います。
ディレクトリに対してアカウントIDとパスワードを設定しアクセス制限
セキュリティを確保したいときなど、特定のディレクトリに対して、アカウントID(ユーザー名)とパスワードを設定して、以下のようにログイン画面を表示させることができます。
ホームページのトップフォルダ(トップディレクトリ ※ホームページの一番上のページ)に以下の2つのファイルを用意して設定します。
※本当はセキュリティ上、同じディレクトリに「.htaccess」と「.htpasswd」ファイルは置きたくないのですが、レンタルサーバーの都合上他のディレクトリに置けない場合があります。その場合は以下の図のようになるのはしかたがないのですが、もしユーザーがアクセスできない他のディレクトリに置ける場合は、そちらに置いてください。
- .htaccess
- .htpasswd
1.アカウントIDとパスワードを決め、パスワードを暗号化します。
【例】
アカウントID:test1
パスワード:test1password
2.「.htpasswd」を編集します。
例として「.htaccess」ファイルが置かれているディレクトリと同じディレクトリに「.htpasswd」ファイルを作成して編集します。
※上記でも記載しましたが、セキュリティ上、ユーザーがアクセスできない他のディレクトリに置ける場合はそちらに置いてください。
3.BASIC認証用にアカウントIDとパスワードのセットで暗号化をします。
以下のURLから「BASIC認証用 パスワード暗号化ツール」を利用できます。
http://orange-factory.com/tool/crypt.cgi
このページで上の例のように「アカウントID」と「パスワード」を入力して「パスワードの暗号化」ボタンをクリックします。
↓ 「パスワードの暗号化」ボタンをクリックすると...
この赤い線で囲まれた部分を「.htpasswd」ファイルのそのまま貼り付けます。
test1:fmWJqMGDYlx7c
※暗号化されたパスワード「fmWJqMGDYlx7c」が表示されていますが、実際にログイン画面で「test1password」と入力するとログインできます。
貼り付けたら「.htpasswd」ファイルを保存します。
4.次に「.htaccess」にBASIC認証の設定を入れます。
【例】
AuthName “Basic Login Test” ←自分の好きな文言を設定できる
AuthType Basic
require valid-user
AuthUserfile /home/xxx/yyy/.htpasswd ←【例】レンタルサーバーのトップディレクトリからのフルパスを入れる
※「AuthUserfile」には、「.htpasswd」の場所を入力します。例えば私の環境では「/var/www/html/.htpasswd」なので「AuthUserfile /var/www/html/.htpasswd」になります。
※注意点は、トップディレクトリからのフルパスを入力する必要があるということです。レンタルサーバーごとに環境が違いため、もし調べたり、実際設定をしてみてもよく分からない場合はレンタルサーバー会社に問い合わせてください。
5.アクセスをしてログインできるか確認します。
上記のようなログイン画面が表示され、指定した「ユーザー名」と「パスワード」でログインできれば正しい設定がされています。
インデックスファイル名(ディレクトリインデックス)を設定する
インデックスファイルとは「ディレクトリインデックス(DirectoryIndex)」とも呼ばれます。
例えばユーザーが「http://yahoo.co.jp/」とか「http://example/cate1/」などファイル名を省略してアクセスしてきた時に自動的に返すファイルのことです。
たとえば、私の環境では以下のように設定されています。
#
# DirectoryIndex: sets the file that Apache will serve if a directory
# is requested.
#
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
つまり、「http://example.com/」など、ファイル名を指定せずにアクセスしてきた時は「index.html」ファイルを表示させるということです。
それでは設定方法です。
「.htaccess」に以下の設定を入れます。
【例】
index.htmlをインデックスファイルにしたい場合
DirectoryIndex index.html
【例】
top.htmlをインデックスファイルにしたい場合
DirectoryIndex top.html
【例】
index.html と index.htm と index.php をインデックスファイルにしたい場合
DirectoryIndex index.html index.htm index.php
このような感じで複数のファイル名を柔軟に設定することができます。
ファイル名を指定せずにディレクトリ名だけを指定してインデックスページが表示されるか試します。
インデックスファイルがないとき、ファイル一覧を表示させずに任意のエラーページを表示させる
環境によっては、以下の図のようにファイル一覧が表示されてしまう場合があります。
ホームページを複雑なディレクトリ構成で作ったが、どのディレクトリにも「index.html」ファイルを置いていない場合などです。
具体的に何をしたのかというと、私の検証用のサーバーに「/var/www/html/test」ディレクトリを作成して、testディレクトリに「test」「test1」ファイルを作成しておき、ブラウザから「http://xxx.xxx./test/」とファイル名まで指定せずにアクセスします。
「index.html」ファイルがあればそのファイルが表示されますが、「index.html」ファイルがないのでディレクトリ一覧が表示されました。
これはセキュリティ的にも問題ですが、この表示を隠すことができます。
このインデックスファイルがない時にファイル一覧を表示させずにどのエラーメッセージを表示させるかを設定できます。
1.エラーページを作ります。
ホームページのトップディレクトリに以下のファイルを作成します。
ファイル名:error.html
ファイルの内容
<html>
<head>
<title>Forbidden – ページを表示できません -</title>
</head>
<body>
<h1>Forbidden – ページを表示できません -</h1>
2.「.htaccess」ファイルに以下を記載します。
ErrorDocument 401 /error.html
ErrorDocument 403 /error.html
ErrorDocument 404 /error.html
ErrorDocument 500 /error.html
※エラーごとに個別に設定せずに、一括して設定しています。
※ホームページのトップディレクトリに置いた場合は「/error.html」という表記になります。
ちなみに上記の設定を入れると、こんな感じで表示されます。
ファイル一覧(Index of)を隠す
これは、上で説明した「インデックスファイルがないとき、ファイル一覧を表示させずに任意のエラーページを表示させる」と似ています。
環境によっては以下の図のようにファイル一覧が表示されることがありますが、隠すことができます。
ファイル一覧(Index of)を隠す設定をすることにより、以下のように「Forbidden」で一覧を表示させないようにすることができます。
「.htaccess」に以下の設定を入れます。
Options -Indexes
上記一文を記述することで、「index.html」などインデックスファイルがないディレクトリに対してファイル名まで指定せずにアクセスした場合は以下のようなメッセージが出ます。
逆にプライベート用など自分しかアクセスしない場合で、且つファイル一覧を表示させたい場合は、「.htaccess」に以下の設定を入れます。
Options +Indexes
この設定を入れると以下のように一覧が表示されます。
特定のIPアドレスや特定のリモートホストを指定してアクセス制限(アクセス許可、アクセス拒否)
たとえば、自宅から自分のPCだけアクセスを許可したいとか、普段しつこくクラッキングをしようとログインを繰り返しているクラッカーがいるが、そのIPだけアクセス拒否をしたいとか、制限をかけることができます。
以上、レンタルサーバーを借りて細かく設定している人でも上記機能が「.htaccess」の中心的な使い方になると思います。
それでは、以下で具体的な設定方法をお伝えします。
2つのアクセスの制限方法があります。
- 一部のユーザーのみ許可して残りは拒否
- 一部のユーザーのみ拒否して残りは許可
一部のユーザーのみ許可して残りは拒否する場合
order allow,deny
deny from all ←まずは全部拒否する
allow from yamada01.com ←ホスト名「yamada01.com」を許可する。
allow from .net ←ホスト名に「.net」が付くコンピュータからのアクセスを全部許可する。
allow from 10.10.10.10 ←IPアドレスが「10.10.10.10」のコンピュータからのアクセスを許可する。
※赤文字の説明書きの部分は「.htaccess」には記述しないでください。
一部のユーザーのみ拒否して残りは許可する場合
order allow,deny
allow from all ←まずは全部許可する
deny from yamada01.com ←ホスト名「yamada01.com」を拒否する。
deny from .net ←ホスト名に「.net」が付くコンピュータからのアクセスを全部拒否する。
deny from 10.10.10.10 ←IPアドレスが「10.10.10.10」のコンピュータからのアクセスを拒否する。
※赤文字の説明書きの部分は「.htaccess」には記述しないでください。
「.htaccess」の記述が間違っている場合
以下のように「Internal Server Error」が表示されます。
その場合は、慌てずにバックアップの「.htaccess」を戻してください。
それで元の状態に戻せます。
WinSCPで「.htaccess」を表示させる手順
ファイルの頭に「.(ドット)」がついていると、「隠しファイル」としてコンピュータに認識されます。
WinSCPは、「隠しファイル」を表示されません。
※FFFTPは「.htaccess」ファイルも表示されます。
その場合、WinSCPで隠しファイルを表示させる手順を以下に記載するので参考にしてください。
1.WinSCPを起動します。
2.「編集」ボタンをクリックします。
3.「ログ」をクリックします。
4.「環境設定」画面で、「パネル」を選択し、右側ペインで「隠しファイルを表示する」にチェックを入れ、「OK」ボタンをクリックします。
5.「保存」ボタンをクリックします。
その後、ログインすると、以下のように「.htaccess」ファイルや「.htpasswd」ファイルが見えるようになります。
以上になりますが、いかがでしたでしょうか。
「.htaccess」ファイルはHTTPサーバーの動作を決める重要な設定ファイルです。
セキュリティ上の観点から詳しく勉強して正しく設定しましょう。
コメント
コメント一覧 (1件)
[…] 【レンタルサーバーの基本】 .htaccessとは一体何なのか? […]