2008年11月11日火曜日

.htaccessの小技編 - 特定のファイルだけ守る

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

<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 ~ "\.(gif|jpg|png)$">
これは、拡張子が「.gif」「.jpg」「.png」であるファイルのみを見れなくします。その他の拡張子を加えたいばあいには、「|」(パイプ)で区切って加えてください。

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


元ネタコピペです。

0 件のコメント: