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?


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 .


1
cela ne change rien
minhajul

70

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

Options -Indexes

Cela a plus d'informations.


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.


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

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


4

Il y a deux manières:

  1. en utilisant .htaccess: Options -Indexes

  2. créer un index.html vide


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.


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 *

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 /? $ À $ ^ .

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.