特定のファイルだけ守る

アクセス制限をかけるときに使う .htpasswd ファイルや、 掲示板やアクセス解析 CGI などが出力するログファイルなどは、通常ですと、 ブラウザーで直接アクセスすると見ることが可能です。 しかし、.htaccess の設定により、 特定のファイルをブラウザーから見ることができないよう制限することができます。

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

上の例では、拡張子が「.log」のファイルを見れないようにします。 これを応用して、たとえば、「.htaccess」と「.htpasswd」を見れないようにするには、

<Files ~ "^\.(htaccess|htpasswd)$">
  deny from all
</Files>

と記述すればいいのです。 この記述は、正規表現によるパターンマッチを使っています。 難しい言葉ですが、具体例を見て応用してください。 なお以下の例では、上記の例の 1 行目だけを記載しております。 1 行だけでは有効になりませんので、必ず 3 行記述するようにして下さい。

特定の拡張子のついたファイルをすべて見れなくする

<Files ~ "\.dat$">

拡張子が「.dat」であるすべてのファイルが見れないようになります。 他の拡張子のファイルを見れないようにするには、「.dat」の部分を書き換えてください。

指定したファイルだけ見れなくする

<Files ~ "^access\.log$">

access.log」というファイルだけが見れないようになります。 他のファイル名にしたいときは、「access\.log」の部分を書き換えてください。 「.」(ドット)の前には、必ず「\」を入れてください。

ワイルドカードを使う

<Files ~ "^foo\.*$">

これは、ファイル名の拡張子を除いた始めの部分が「foo」となっているファイルが見れなくなります。 たとえば、「foo.dat」「foo.log」「foo.jpg」「foo.gif」は、 すべて対象となります。ただ、「foo」のように拡張子を持たない場合には適用されません。

一文字ワイルドカードを使う

<Files ~ "^access?\.dat$">

これは、「access」の次にくる一文字がなんであろうと適用されます。 ただし、ファイル名の最後は「.dat」である必要があります。 たとえば、「access1.dat」「access2.dat」「accessA.dat」 はすべて適用されます。 ただし、「?」の部分が2文字になると適用されません。 たとえば、「access11.dat」がそうです。 この場合には、<Files ~ "^access??\.dat$"> とする必要があります。

複数の文字列を同時に指定する。

<Files ~ "\.(gif|jpg|png)$">

これは、拡張子が「.gif」「.jpg」「.png」 であるファイルのみを見れなくします。 その他の拡張子を加えたい場合には、「|」(パイプ)で区切って加えてください。

正規表現の記号の紹介

上記の例では正規表現を使っていますが、正規表現で使われる記号の意味については下表をご覧ください。

記号 意味
~ パターンマッチであるという意味です。 「=」でないことに注意してください。 「~」より右側に記述したルールにマッチしたファイルを適用するということです。
^ ファイル名の先頭であることを指示します。 たとえば、<Files ~ "access"> と記述すると、ファイル名のどこかに「access」という文字列が入っていれば OKとなります。しかし、<Files ~ "^access"> と記述すると、ファイル名の先頭が「access」でないとマッチしません。
$ ファイル名の最後であることを指示します。 たとえば、<Files ~ "access$">と記述すると、 ファイル名の最後が「access」となっているファイルのみが適用されます。 したがって、「access.log」のようなファイル名には適用されません。
* ワイルドカードです。
? 一文字ワイルドカードです。
\ .」「\」「|」「$」のような記号文字は、 <Files> 指示子内では特別な意味を持ってしまいます。 したがって、このような文字を純粋に指定したい場合には、その文字の効果を無効にするために、 その文字の直前に「\」を記述します。 たとえば、<Files ~ "access$"> と記述すると、 「$」はファイル名の最後という意味を持った記号ですので、 純粋に「access$」というファイル名にマッチしません。 この場合には、「$」の効果を無効にするために、直前に「\」を入れて <Files ~ "access\$"> と記述します。
(foo|bar) 括弧内に「|」で区切って記述すると、その中に記述された文字列のいずれかという意味となります。 この場合は「foo」もしくは「bar」という意味となります。