Usando o nginx e o Drupal, como eu sirvo um erro 404 para arquivos estáticos e diretórios que existem?

4

Eu implanto um site do Drupal usando git (bem, OK, os desenvolvedores o implantam; tento mantê-los fora de problemas) e, por essa razão, o site tem um diretório .git e um arquivo .gitignore em a raiz do documento.

Atualmente, as permissões nos arquivos são suficientes para fazer com que o nginx retorne um erro 403 Proibido se esses arquivos forem acessados no navegador da Web.

No entanto, eu gostaria que o nginx negasse completamente a existência deste arquivo e diretório, e retornasse 404 se alguém tentar acessá-los no navegador.

Mas espere, tem mais!

O que eu realmente quero que aconteça é que o navegador receba a página de erro 404 gerada pelo Drupal. Na página admin/settings/error-reporting do Drupal, vejo que erros 404 estão sendo enviados para o link 404error , um nó do Drupal com um dos links da Internet. páginas 404 mais interessantes.

Minha configuração nginx já contém um bloco @drupal que passa uma solicitação para o Drupal. Então, eu quero passar o pedido para o Drupal, mas eu não quero que o Drupal tente servir o arquivo estático existente, mas simplesmente para servir a página 404.

location @drupal {
    rewrite ^/(.+)$        /index.php?q=$1 last;
}

Infelizmente, o Google não foi muito útil aqui; a maioria das pessoas parece ter o problema oposto. Como posso fazer com que solicitações para qualquer coisa no diretório .git ou no arquivo .gitignore sejam enviadas para a página 404 do Drupal?

    
por Michael Hampton 08.08.2012 / 01:39

1 resposta

2

Tente criar um bloco de localização para o diretório .git e defina como interno . Isso deve acionar 404 respostas para qualquer solicitação. Se estes não forem passados para o Drupal, pode ser necessário definir uma error_page para fazê-lo.

location /.git {
    internal;
}
error_page 404 /notfound;

A outra opção é apenas reescrever essas solicitações para algo inexistente:

rewrite ^/.git /notfound;
    
por 09.08.2012 / 09:12