.htaccessの書式とよく使う設定

Apacheの設定ファイル.htaccessを使用してできることは多岐にわたります。その中でも代表的で、サイト制作には割合必須な機能の紹介を、書式の説明と並行して行いましょう。

トップページにindex.html以外のファイルを指定する

たとえばhttp://www.○○○.com/というアドレスのサイトで、http://www.○○○.com/とだけアドレスバーに打ち込んで表示されるページは、ドキュメントルートに置かれたindex.htmlというファイルです。これは下位のディレクトリでも同様で、http://www.○○○.com/page/というアドレスで表示されるのは、ドキュメントルートに存在するpageディレクトリに置かれたindex.html、といったように、指定されたディレクトリに置かれたindex.htmlを探して表示するというのがhtml文書での約束事です。
一方、ページ中にPHPプログラムを含む場合に、ファイルの拡張子を.phpにしなければならないという約束事も存在します。トップページにPHPプログラムを置きたい場合など、ファイル名をindex.phpとしてしまうとブラウザでアクセスしてもよくわからないリストページが現れるだけで、柔軟に解釈してindex.phpを表示してくれたりはしません。そこでディレクトリ名のみをアドレス指定された場合に探すファイルを、以下のような記述で設定します。

DirectoryIndex index.php index.html

DirectoryIndexの部分が設定項目名、index.php index.htmlの部分が設定したい値です。つまり.htaccessの書式は以下のようになります。

設定項目名 値1 値2

php.iniの場合と異なり、設定項目と値の間を半角スペースで区切り、イコールはつけません。設定したい値が複数ある場合は、値同士をやはり半角スペースで区切ります。そして文の終わりには、たとえ設定項目が1つであったとしても改行が必要です。ちなみにコメントアウトは以前書いた通り#を使います。
DirectoryIndexの説明に戻りますと、値として指定された名称のファイルを、ディレクトリ名でアクセスされた場合表示します。さらに後ろに続けて値を与えると、最初に与えた値のファイル名が無かった場合に、次に探すべきファイル名と解釈します。上の例ならば、まずindex.phpを探して、無かったらindex.htmlを探して表示ということですね。ちなみに.htaccessの設定は下位ディレクトリにも反映されますので、こういった設定をドキュメントルートでしてしまうとわかりやすいです。

DirectoryIndexで指定されたファイルが存在しなかったときリスト表示になるのを避ける

先にindex.html無しでディレクトリのアドレスを入力してみたときの、よくわからないリストの出現を抑える方法です。

Options -Indexes

セキュリティの為にも、ファイル構成が外部から筒抜けになってしまうのは避けたいところです。公開サイトを段階的に大きくしていくケースでも、この設定は最優先でしてしまいましょう。

ディレクトリへのアクセスにパスワードをかける(Basic認証)

外部からアクセスされては困るディレクトリに、ユーザ名とパスワードを要求するタイプのプロテクトをかける事もできます。パスワードは.htpasswdというファイルに保存して、そのファイルへの参照を.htaccessで指定します。.htpasswdファイルはドキュメントルートより上の階層に置いて、まかり間違ってもそちらに外部からアクセスされないようにする必要があります。ユーザ名user、パスワードpassという例で書き方を説明します。

user:pass

こちらが.htpasswdファイルへの記述です。複数ユーザにも対応可能ですのでその場合は同ファイル内に羅列して書いてしまって構いません。そしてこちらも文の終わりの改行が必須です。

AuthName "hidden"
AuthUserFile "/home/usr/.htpasswd"
AuthType Basic
require valid-user

こちらが.htaccessの記述です。AuthNameという項目は、パスワードを求める領域の名称で、ダイアログの本文に現れます。特に意味はないので好きな名称を設定してください。AuthUserFileには.htpasswdファイルへのパスを与えます。なお.htpasswdのファイル名は自由に決められるようですので、パスの指定もそれに即して変えてください。AuthType Basicは認証の種類で、この他にDigestという値もとり得ますが、対応ブラウザが狭い、Apacheのヴァージョンにより書式が異なる部分が出るなどの問題があり、あまり積極的に採用されていないようです。最後のrequireでは複数ユーザが登録されていた場合に、アクセスを許すユーザを名指しで指定するというものです。vaLid-userにしておけば、全登録ユーザを許可します。
このBasic認証は少し面倒くさいでしょうか。ちなみに、cPanelではこのBasic認証の設定をPassword Protected DirectoriesというアイコンからGUIで行えます。ちゃんと.htpasswdをドキュメントルートより上に保存してくれるので便利です。

アクセスのリダイレクトを行う

指定されたパスにアクセスがあったとき、そのアクセスを別のアドレスに振り向けます。

Redirect permanent / http://www.google.com/

この例では、Redirect permanentの部分が設定項目名で、その後ろに値を2つ与えています。1つ目の値はただのスラッシュですが、これはドキュメントルートを指定して与えていると読んで下さい。もしドキュメントルート直下のpageディレクトリを与えたいなら/page/となります。2つ目の値はリダイレクト先のhttp://から始まるアドレスです。つまりこの例では、ホームページにアクセスされたらgoogle.comにジャンプするという結果になります。ホームページ移転などがあったときに、この設定を使って新ページにリダイレクトしましょう。

特定の拡張子のファイルへのアクセスを禁止する

さて、長々と説明してきてやっと前回予告した機能の説明に入ります。最後になってしまったのは、書式がこれまでのものといくらか異なるからです。拡張子.iniのファイルへのアクセスを禁止する例を見てみましょう。

<Files ~ "\.ini$">
deny from all
</Files>

htmlのような、タグで挟んだ書式になっています。しかし異なるのは、タグの終わりと文の終わりに改行を必要とするため、3行で1セットということです。最初のタグの中にあるバックスラッシュは、正規表現でのエスケープを表しています。windows環境では¥マークになりますね。正規表現全般については説明を省きますが、この項目でよく使いそうな指定としては、”または”を表す|(縦の一本棒)、前方一致を表す^、後方一致の$などがあります。それらを使って、拡張子が.iniおよびファイル名の先頭が.htのファイル(.htaccess、.htpasswd)へのアクセスを禁止してみます。

<Files ~ "\.ini$|^\.ht">
deny from all
</Files>

他にも特定プロバイダからのアクセス禁止や、カスタムエラーページの参照などできることは沢山あるのですが、ひとまずここでは解説を省きます。また.htaccessを使ったPHPの設定変更(php.iniを使用しない)については、独立したエントリに書くつもりです。


.htaccessの書式とよく使う設定」への2件のフィードバック

  1. ピンバック: サイトC:000webhostで頻発するwordpressアップデートエラーを回避する | AkisiのWEB制作日記

  2. ピンバック: PHPで正規表現による文字列のパターンマッチングを行う | AkisiのWEB制作日記

コメントを残す

メールアドレスが公開されることはありません。