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?


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 .


1
isso não muda nada
minhajul de

69

Tente adicionar isso ao .htaccessarquivo nesse diretório.

Options -Indexes

Isso tem mais informações.


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.


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

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


4

Existem duas maneiras:

  1. usando .htaccess: Options -Indexes

  2. crie index.html em branco


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.


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 *

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 ^ $ .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.