index.htmlとOptions -IndexesとDirectoryIndexとIndexIgnore(酒と泪と男と女的なニュアンスで)

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
これ何年前の歌だっけ?

おまとめ三行

ファイル一覧の表示を許可しない
アクセスしたところで一覧は見れないよ〜
バイツァダスト(負けて死ね)

ウェブサイトで使っているcssとかjs、あるいは画像って、基本的にはURLでアクセスできるようなところに置いてありますよね。だから誰でも見れる。

だけど、cssやjsファイルそのものはともかくとして、そのファイルが置いてあるディレクトリに直接アクセスできるのは、セキュリティ上、必ずしも良いとは言えないときもあると思います。

例えばあかつきのお宿の場合、cssファイルは「http://norm-nois.com/css/」の下に置いてあるし、jsも「http://norm-nois.com/js/」の下にあるから、それぞれのURLにアクセスすると、置いてあるファイルの一覧が見えてしまう(今は見えないけど)。まあ、うちの場合は見られて困るほどのものもないから別に良いっちゃ良いんですけど、人によってはそれを避けたい場合もあるでしょう。

今日はそれをちょっとやってみましょう。



index.htmlを置いとく

やり方の一つとしては、各ディレクトリにindex.htmlを置いとくことです。index.phpとかでも良いけど。

ディレクトリにアクセスした場合、その直下にindex.htmlがあると、自動的に読み込んでくれます。つまりindex.htmlを置いとけば、「http://norm-nois.com/css/」と「http://norm-nois.com/css/index.html」は、同じ挙動をするってことですね。

Wordpressはそんな感じのことをやってるような気がします。wp-contentディレクトリとか、その下にあるpluginsディレクトリとかの中に全部index.phpが置いてあって、ファイルの中には何も書かれてない。だからURLで直接アクセスしても、真っ白なページが表示されるだけで、ファイルの一覧が表示されないようになっています。

これでもダメではないですが、でも一つずつindex.htmlを用意して置いて……ってのも、ちょい面倒ですよね。うっかり設置し忘れたディレクトリとかも出て来ちゃうかもしれないし、それならもっと簡単に、一括で設定できる方が良いと思います。



Options -Indexes

その一括のやり方ってのが、.htaccessに書いちゃう方法です。

.htaccessを開いたら、以下の一行を書く。

Options -Indexes

これだけでオッケーです。楽勝っすね。

意味としては、ディレクトリへのアクセスがあった場合、index.htmlとかがなければ、ディレクトリの中にあるファイル一覧の表示を許可しない、みたいな感じです。なので例えば「http://norm-nois.com/css/」にアクセスしたとき、cssディレクトリの中にindex.htmlがあればそれを表示しますが、なければ403エラーになります。

一覧表示を避けるなら、たぶんこの方法が一番お手軽なんじゃないでしょうか。



DirectoryIndex

上記のやり方ができれば良いんですが、レンタルサーバーなどの場合だと、Optionsが使えない場合があります。僕が知る限り、さくらインターネットは使えない。プランによるかもしれないけど。

その場合は代替手段として、以下のような書き方があります。

DirectoryIndex index.html .ht

これをhtaccessに書く。

挙動としては上記のOptionsとほとんど一緒です。ディレクトリへのアクセスがあった場合、index.htmlがなければ.htというファイルを探すのですが、でも.htなんてファイルは、あったところで(たぶん)ブラウザでは開けないので403エラーになると、そんな感じ。

ただしこの書き方だと、対象がindex.htmlのみになってしまいます。だから、もしindex.htmlの他にindex.phpとかindex.cgiとかも対象にしたいというのであれば、全部書く必要があります。

DirectoryIndex index.html index.php index.cdi .ht

これだと、ディレクトリへのアクセスがあった場合に、まずindex.htmlを探しに行って、なければindex.phpを探して、それでもなければindex.cgiを探し、それでもなければ403エラーになります。



IndexIgnore

「Options -Indexes」や「DirectoryIndex index.html .ht」は、ディレクトリへのアクセスそのものを禁止してしまうやり方でしたが、アクセスは許可するけど、アクセスしたところで一覧は見れないよ〜的なことをやりたければ、こんな書き方もあります。

IndexIgnore *

これだと403エラーにはなりませんが、ファイルの一覧は何も表示されない状態になります。

IndexIgnoreってのは、条件に該当するファイルを一覧表示から除外する、みたいなものなので、ワイルドカードの「*」を条件に入れとけば、全部のファイルが一覧から見えなくなるわけですね。これが例えば「IndexIgnore *.css」とかだと、拡張子がcssのファイルだけが一覧から除外されるので、ディレクトリの中に.txtみたいなテキストファイルが入っていれば、それは一覧表示されることになります。






どれを使うかはお好みで、あるいは状況次第ってとこですかね。

個人的には、403エラーでアクセスを禁止するよりは、index.htmlを各ディレクトリに配置して、不正なアクセスがあったときに「ここにアクセスしたということは、お前はまんまと引っかかったってことだ。バイツァダスト(負けて死ね)」って表示させるのが、一番オススメですねー。

すいません、嘘です。まあ、Optionsが使えるならそれを採用するのが良いんじゃないでしょうか。

バイツァダスト方式の場合、googleのクローラーとかがそれ見て何て思うか気になるとこですが、そんなんでSEOががくんと下がるようなことは、ないよね……^^;

まだコメントはいただけてないみたい……
もしかしたら何か関連しているかも?