refuser la liste des répertoires avec htaccess

103

J'ai un dossier, par exemple: /public_html/Davood/ et trop de sous - dossier dans le dossier, par exemple: /public_html/Davood/Test1/, /public_html/Davood/Test1/Test/, /public_html/Davood/Test2/, ...

Je veux ajouter un fichier htaccess dans /public_html/Davood/Pour refuser DirectoryListing In /DavoodAnd Sub Folders, c'est possible?

DJafari
la source
4
Je ne vois pas pourquoi cela Options All -Indexesn'a pas fonctionné comme dans quelques réponses!
Fr0zenFyr
1
@ Fr0zenFyr cela dépend de la configuration du serveur Web, si AllowOverride All, fonctionne
DJafari

Réponses:

124

Options -Les index devraient fonctionner pour empêcher les listes de répertoires.

Si vous utilisez un fichier .htaccess, assurez-vous d'avoir au moins le paramètre "allowoverride options" dans votre fichier de configuration principal d' Apache .

Codeur PPC
la source
1
cela ne change rien
minhajul
70

Essayez de l'ajouter au .htaccessfichier de ce répertoire.

Options -Indexes

Cela a plus d'informations.

Bryan Drewery
la source
Ouais, je pensais que -Indexes les listes de répertoires désactivés, au lieu de cela, il bloque tout le contenu du dossier ... Est-ce que quelqu'un sait pourquoi?
Michael Fever
Tout ce que je peux penser, c'est qu'il y a un problème avec la configuration du serveur. Essayez d'activer le rewritemodule et le paramètre de répertoire sur AllowOverride All. Si tout cela est déjà en place et que ce que vous avez commenté est vrai, je dois être trop chanceux pour pouvoir Options All -Indexestravailler dans chaque projet sur différents serveurs.
Fr0zenFyr
35

Si Options -Indexescela ne fonctionne pas comme Bryan Drewery l'a suggéré, vous pouvez écrire une méthode récursive pour créer des fichiers index.php vides.

Placez-le à l'intérieur de votre dossier de base que vous souhaitez protéger, vous pouvez le nommer comme vous le souhaitez (je recommanderais 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);
            }
        }
    }
}

?>

Ces fichiers index.php vides peuvent être facilement supprimés ou écrasés, et ils empêcheront vos répertoires d'être listés.

Cyclone
la source
8
Bien qu'un fichier vide ne soit pas si important, une meilleure solution pourrait être d'utiliser des liens symboliques , ce qui économise un peu d'espace, et il n'aurait besoin de modifier qu'un seul fichier s'il choisissait d'afficher une sorte de message uniforme. au lieu d'une page blanche.
daalbert
18

Pour afficher l'erreur interdite, incluez ces lignes dans votre fichier .htaccess:

Options -Indexes 

Si nous voulons indexer nos fichiers et les afficher avec des informations, utilisez:

IndexOptions -FancyIndexing

Si nous voulons qu'une extension particulière ne s'affiche pas, alors:

IndexIgnore *.zip *.css
Vivek
la source
1
.httaccessou .htaccess?
NaveenDA
8

Options -Indexes fonctionne parfaitement pour moi,

voici le .htaccessfichier:

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


   ....etc stuff

</IfModule>

Avant : entrez la description de l'image ici

Après :

entrez la description de l'image ici

Saurabh Mistry
la source
4

Il y a deux manières:

  1. en utilisant .htaccess: Options -Indexes

  2. créer un index.html vide

Cakka
la source
3
Options -Indexes

Je dois essayer de créer un fichier .htaccess dans le répertoire actuel que je veux interdire la liste d'index de répertoire. Mais, désolé, je ne connais pas les récursifs dans le code .htaccess.

Essayez-le.

Jersey William
la source
2

Accepter que

Options -Indexes

devrait fonctionner si le serveur principal est configuré pour autoriser les remplacements d'options, mais sinon, cela masquera tous les fichiers de la liste (de sorte que chaque répertoire apparaît vide):

IndexIgnore *
dashrb
la source
2

Options -Indexes renvoie une erreur 403 interdite pour un répertoire protégé. Le même comportement peut être obtenu en utilisant la redirection suivante dans htaccess:

RedirectMatch 403 ^/folder/?$ 

Cela renverra une erreur interdite pour example.com/folder/ .

Vous pouvez également utiliser mod-rewrite pour interdire une demande de dossier.

RewriteEngine on

RewriteRule ^folder/?$ - [F]

Si votre htaccess est dans le dossier que vous allez interdire, le motif de changement de RewriteRule ^ dossier /? $ À $ ^ .

Amit Verma
la source