Pergunta

Existe uma maneira como eu pode configurar o servidor web Apache para retornar um (não encontrado) código de erro 404 em vez de 403 (proibido) para alguns diretórios específicos que eu quero para não permitir a ser acessado?

Eu encontrei algumas soluções que sugerem o uso de mod_rewrite, como por exemplo.

RewriteEngine On
RewriteRule ^.*$ /404 [L]

Como o objetivo de enviar 404 em vez de 403 é para ofuscar a estrutura de diretórios, esta solução é muito revelador, porque ele redireciona para algum local diferente, que torna óbvio que o diretório originalmente acessada de fato existe.

Foi útil?

Solução

RedirectMatch como no exemplo.

RedirectMatch 404 ".*\/\..*"

faz o truque, que proíbe o acesso a todos os arquivos ou diretórios começando com um ponto, dando um erro "404 Not Found".

A partir do manual do Apache: "A Redirect [Jogo] directiva mapeia um URL antigo para um novo, pedindo o cliente a buscar novamente o recurso no novo local." Por padrão, Redirect envia um código de 302 retorno, mas pode também retornar outros códigos de status, como mostrado acima.

Outras dicas

Você pode fazer algo como isto:

.htaccess

ErrorDocument 403 /error/404.php

404.php

<?php
$status = $_SERVER['REDIRECT_STATUS'] = 404;
header( $_SERVER['SERVER_PROTOCOL'] . ' ' . $status);
?>

404 Error

Depois de ter o mesmo problema, eu acabei com o arquivo .htaccess seguinte

Options -Indexes
RewriteCond %{HTTP_HOST} ^(www\.)?mydomain.com [NC]
RewriteRule ^(.*)/$ - [R=404,NC]

A 1ª e 3ª linha garantir que você não pode listar o conteúdo da pasta, e se você fizer isso, você receberá um erro 404. A RewriteCond directiva garante que esta regra de reescrita só se aplica ao domínio principal. Desde que eu tenho vários subdomínios, sem a rewritecond, acessando www.mydomain.com/subdomain também estava retornando a 404, o que não era o que eu pretendia.

Para alterar todas as 403,400 erros em erros 404, colocar isso no final de /etc/apache2/conf.d/localized-error-pages ou em um .htaccess

# Will raise a 404 error, because the file <fake_file_for_apache_404.php> doesn't exist.
# We change 403 or 400 to 404 !
ErrorDocument 400 /fake_file_for_apache_404.php
ErrorDocument 403 /fake_file_for_apache_404.php
# We need to rewrite 404 error, else we will have "fake_file_for_apache_404.php not found"
ErrorDocument 404 "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\"><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL <script type=\"text/javascript\">document.write(document.location.pathname);</script> was not found on this server.</p></body></html>"
ErrorDocument 500 "Server in update. Please comme back later."
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top