Webブラウザでサーバにアクセスしたときに、Webページが表示されない場合はエラーページが表示されます。
しかし、エラーページを表示せずにファイル一覧を表示したいことがあり、設定方法を調べました。
Contents
Webサーバのファイル一覧を表示する
今回、Xserverで稼働しているWebサーバの、とあるディレクトリを、Webブラウザでアクセスしてファイル一覧を表示させる必要が発生しました。
Xserverで使われている Webサーバは Apache 2.4.6です。
この環境で、Webブラウザを使ってファイル一覧を表示する手順を調べました。
- デフォルトファイルを削除する
- .htaccessファイルを編集する
この2つを行えばできるようです。
デフォルトファイルを削除する
ブラウザでWebサーバにアクセスするときに「http://hogehoge.com/index.htm」と書く人は少ないですよね。
通常は「hogehoge.com」だけでアクセスできます。
これは、Webブラウザで最後のファイルが省略された場合に、自動的に付加するファイル名が設定されているので、そのファイルがあれば「hogehoge.com」だけでアクセスできるのです。
通常、デフォルトファイルは「index.html」「index.htm」「index.php」などが指定されています。
逆に言えば、このデフォルトファイルがあると、常にそのファイルが表示されてしまうので、ファイル一覧を表示する場合は邪魔になってしまいます。
なので、ファイル一覧を表示したいディレクトリにデフォルトファイルがある場合は削除しておく必要があります。
.htaccessを編集する
デフォルトファイルがない場合、何も設定しなければ、表示するページがないためエラーとなります。
デフォルトファイルがない状態で、エラーページを出さずにファイル一覧を表示する設定は「.htaccess」ファイルに記述します。
.htaccessファイルは、アクセス制御するファイルで設定内容によって様々な動きをさせることができます。
今回はファイル一覧をさせたいディレクトリに .htaccessファイルを設置し、内容を以下のように記述します。
<Files ~"^\.ht">
deny from all
<Files>
Options +Indexes
簡単に説明すると
<Files >~</Files>
は「.htで始まるファイルは表示させない」という内容です。
つまり、.htaccessファイルを表示させないための設定です。
次の「Options +Indexes」がファイル一覧を表示させる設定です。
ちなみに、表示させたくない場合は「Options -Indexes」と記述します。
パーミッション設定も必要
これでファイル一覧が表示されるはずなので、ブラウザで該当のディレクトリにアクセスしてみました。
しかし、ファイル一覧は表示されずに、アクセス権限がないというエラー(403エラー)が表示されました。
これはパーミッションの設定で弾かれているためです。
XServerのファイルマネージャーで確認すると、該当のディレクトリのパーミッションは「711」となっています。
今回はファイル表示させるために「755」に変更しました。
ちなみにパーミッションとはWindowsでいうところでアクセス権限設定です。
細かい内容の説明は今回の本筋ではないので省略します。
文字化け対策
無事にWebブラウザでファイル一覧を表示できたのですが、日本語で作成したファイル名やサブディレクトリが文字化けしています。
ブラウザの表示設定でエンコードを変えると正常に表示されるのですが、いちいち設定を変えるのも面倒なので、サーバ側の設定でデフォルトエンコードを指定します。
この設定も .htaccessに記述します。
以下の内容を追加します。
IndexOptions Charset=utf-8
これはデフォルトエンコードを「UTF-8」にする設定です。
これで日本語ファイルも正常に表示されるようになりました。
まとめ
最初は .htaccessファイルを設定するだけの簡単設定かと思っていましたが、結構手間取ってしまいました。
手順としては
- デフォルトファイルを削除
- .htaccessでファイル一覧表示をON
- パーミッション設定を変更(「755」にする)
- 文字化け対策でデフォルトエンコードを設定
となりました。
あ、あと忘れてはいけないのはセキュリティのために、ファイル一覧表示させるディレクトリにベーシック認証の設定をしました。
こうしておかないと、URLを知っている人は誰でもファイル一覧が見えてしまいます。
そもそもファイル一覧を表示させること自体がセキュリティ上、あまり良くないのですが、どしても必要な場合はベーシック認証で特定の人にしか公開しないようにしておくべきかと思います。
コメント