htaccessでディレクトリ一覧を拒否する


103

私は、例えば、フォルダを持っています/public_html/Davood/ し、フォルダ内にあまりにも多くのサブフォルダ、例えば:/public_html/Davood/Test1//public_html/Davood/Test1/Test//public_html/Davood/Test2/、...

htaccessファイルを/public_html/Davood/DirectoryListing In /DavoodおよびSub Folders を拒否するために追加したいのですが、可能ですか?


3
Options All -Indexesいくつかの回答のようにうまくいかなかった理由がわかりません!
Fr0zenFyr 2017年

1
@ Fr0zenFyrそれが機能する場合AllowOverride All、ウェブサーバーの設定に依存します
DJafari

回答:


124

オプション-インデックスは、ディレクトリリストを防止するために機能します。

.htaccessファイルを使用している場合は、メインのApache構成ファイルに少なくとも「allowoverrideオプション」設定があることを確認してください。


1
これは何も変更しません
minhajul

69

これを.htaccessそのディレクトリのファイルに追加してみてください。

Options -Indexes

これにはより多くの情報があります。


ええ、私は-Indexesがディレクトリ一覧を無効にする代わりに、フォルダからのすべてのコンテンツをブロックすると思っていました...なぜ誰かが知っていますか?
マイケルフィーバー

私が考えることができるすべては、サーバー構成にいくつかの問題があることです。rewriteモジュールとディレクトリ設定を有効にしてみてくださいAllowOverride All。それがすべて整っていて、あなたのコメントが真実なら、私は幸運すぎOptions All -Indexesてさまざまなサーバー上のすべてのプロジェクトで作業することができません。
Fr0zenFyr 2017年

35

Options -IndexesがBryan Dreweryの提案どおりに機能しない場合は、再帰的なメソッドを記述して、空のindex.phpファイルを作成できます。

保護したいベースフォルダの中にこれを置き、名前を付けることができます(私はindex.phpをお勧めします)

<?php

recurse(".");

function recurse($path){
    foreach(scandir($path) as $o){
        if($o != "." && $o != ".."){
            $full = $path . "/" . $o;
            if(is_dir($full)){
                if(!file_exists($full . "/index.php")){
                    file_put_contents($full . "/index.php", "");
                }
                recurse($full);
            }
        }
    }
}

?>

これらの空のindex.phpファイルは簡単に削除または上書きすることができ、ディレクトリが一覧表示されないようにします。


8
空のファイルはそれほど大きな問題ではありませんが、シンボリックリンクを使用することをお勧めします。これにより、少しのスペースが節約され、ある種の統一されたメッセージを表示することを選択した場合、1つのファイルを変更するだけで済みます。空白のページの代わりに。
daalbert、

18

Forbiddenエラーを表示するには、.htaccessファイルに次の行を含めます。

Options -Indexes 

ファイルにインデックスを付けて、いくつかの情報を表示したい場合は、次を使用します。

IndexOptions -FancyIndexing

特定の拡張子を表示しない場合は、次のようにします。

IndexIgnore *.zip *.css

1
.httaccessまたは.htaccess
NaveenDA 2017

8

オプション-インデックス は私にとって完璧に機能します、

ここに.htaccessファイルがあります:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes <---- This Works for Me :)
    </IfModule>


   ....etc stuff

</IfModule>

前 : ここに画像の説明を入力してください

後:

ここに画像の説明を入力してください


4

2つの方法があります。

  1. .htaccessを使用: Options -Indexes

  2. 空のindex.htmlを作成する


3
Options -Indexes

現在のディレクトリである.htaccessファイルを作成して、ディレクトリインデックスのリストを許可しないようにする必要があります。しかし、申し訳ありませんが、.htaccessコードの再帰についてはわかりません。

それを試してみてください。


2

同意する

Options -Indexes

メインサーバーがオプションの上書きを許可するように構成されている場合は機能しますが、許可されていない場合は、すべてのファイルがリストから非表示になります(したがって、すべてのディレクトリが空に表示されます)。

IndexIgnore *

2

オプション-Indexesは、保護されたディレクトリに対して403 forbiddenエラーを返します。htaccessで次のリダイレクトを使用すると、同じ動作を実現できます。

RedirectMatch 403 ^/folder/?$ 

これにより、example.com/folder/の禁止されたエラーが返されます

また、mod-rewriteを使用して、フォルダーの要求を禁止することもできます。

RewriteEngine on

RewriteRule ^folder/?$ - [F]

htaccessが禁止するフォルダーにある場合は、RewriteRuleのパターンを^ folder /?$から^ $に変更します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.