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