特定のファイルだけ守る

アクセス制限をかけるときに使う「.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」という意味となります。