negar listagem de diretório com htaccess

103

Eu tenho uma pasta, por exemplo: /public_html/Davood/ e sub pasta muitos em pasta, por exemplo: /public_html/Davood/Test1/, /public_html/Davood/Test1/Test/, /public_html/Davood/Test2/, ...

Eu quero adicionar um arquivo htaccess em /public_html/Davood/Para negar DirectoryListing em /Davoode subpastas, é possível?

DJafari
fonte
3
Não vejo porque Options All -Indexesnão funcionou como em algumas respostas!
Fr0zenFyr
1
@ Fr0zenFyr depende da configuração do servidor web, se AllowOverride Allfuncionar
DJafari

Respostas:

124

Opções -Os índices devem funcionar para evitar listagens de diretório.

Se você estiver usando um arquivo .htaccess, certifique-se de ter pelo menos a configuração "opções allowoverride" em seu arquivo de configuração principal do apache .

PPC-Coder
fonte
1
isso não muda nada
minhajul de
69

Tente adicionar isso ao .htaccessarquivo nesse diretório.

Options -Indexes

Isso tem mais informações.

Bryan Drewery
fonte
Sim, eu pensei -Indexes listas de diretórios desabilitadas, em vez disso, bloqueia todo o conteúdo da pasta ... Alguém sabe por quê?
Michael Fever
Só consigo pensar que há algum problema com a configuração do servidor. Tente habilitar o rewritemódulo e a configuração do diretório para AllowOverride All. Se tudo isso já está no lugar, e o que você comentou é verdade, devo ter muita sorte de conseguir Options All -Indexestrabalhar em cada projeto em servidores diferentes.
Fr0zenFyr
35

Se Options -Indexesnão funcionar como Bryan Drewery sugeriu, você poderia escrever um método recursivo para criar arquivos index.php em branco.

Coloque isso dentro da pasta base que deseja proteger, você pode nomeá-lo como quiser (eu recomendaria 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);
            }
        }
    }
}

?>

Esses arquivos index.php em branco podem ser facilmente excluídos ou sobrescritos, e eles impedirão que seus diretórios sejam listáveis.

Ciclone
fonte
8
Embora um arquivo vazio não seja um grande problema, uma solução melhor pode ser usar links simbólicos , dessa forma economiza um pouco de espaço, e ele só precisaria modificar 1 arquivo se optasse por exibir algum tipo de mensagem uniforme em vez de uma página em branco.
daalbert
18

Para mostrar o erro Proibido, inclua estas linhas em seu arquivo .htaccess:

Options -Indexes 

Se quisermos indexar nossos arquivos e mostrá-los com algumas informações, use:

IndexOptions -FancyIndexing

Se quisermos que alguma extensão específica não apareça, então:

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

Opções -Indexes funcionam perfeitamente para mim,

aqui está o .htaccessarquivo:

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


   ....etc stuff

</IfModule>

Antes : insira a descrição da imagem aqui

Depois de :

insira a descrição da imagem aqui

Saurabh Mistry
fonte
4

Existem duas maneiras:

  1. usando .htaccess: Options -Indexes

  2. crie index.html em branco

Cakka
fonte
3
Options -Indexes

Eu tenho que tentar criar o arquivo .htaccess no diretório atual que eu quero impedir a listagem de índice de diretório. Mas, desculpe, eu não sei sobre recursiva no código .htaccess.

Tente.

Jersey William
fonte
2

Concordo que

Options -Indexes

deve funcionar se o servidor principal estiver configurado para permitir substituições de opções, mas se não, isso irá ocultar todos os arquivos da lista (para que todos os diretórios apareçam vazios):

IndexIgnore *
dashrb
fonte
2

Opções -Indexes retorna um erro 403 proibido para um diretório protegido. O mesmo comportamento pode ser alcançado usando o seguinte redirecionamento no htaccess:

RedirectMatch 403 ^/folder/?$ 

Isso retornará um erro proibido para example.com/folder/ .

Você também pode usar mod-rewrite para proibir um pedido de pasta.

RewriteEngine on

RewriteRule ^folder/?$ - [F]

Se o seu htaccess estiver na pasta que você vai proibir, mude o padrão de RewriteRule de ^ folder /? $ Para ^ $ .

Amit Verma
fonte