(htaccess) Como evitar um arquivo de access direto a URL?

Este é o meu segundo post para o mesmo problema. Porque o post anterior precisava de mais algum exemplo.

Ok, vamos dizer novamente, eu estou usando o Apache e eu tenho uma pasta web de exemplo (no meu localhost) como:

  • http: // localhost / test /

Na pasta, os arquivos serão:

  • index.html
  • https://stackoverflow.com/questions/10236717/htaccess-how-to-prevent-a-file-from-direct-url-access/sample.jpg
  • .htaccess

O “index.html” includeá simplesmente:

     

Quando eu executo o site em http://localhost/test/ , haverá simplesmente mostrando a imagem `https://stackoverflow.com/questions/10236717/htaccess-how-to-prevent-a-file-from-direct-url-access/sample.jpg ‘na página.

ENTÃO O PROBLEMA AQUI É :

  • Desejo impedir que a imagem seja exibida como http://localhost/test/https://stackoverflow.com/questions/10236717/htaccess-how-to-prevent-a-file-from-direct-url-access/sample.jpg diretamente na barra de URL.

Nota:
Depois de um dia de obter respostas abaixo, eu encontrei todas as soluções logicamente funcionam, mas problema com o Firefox. Quer dizer, as respostas abaixo estão dando a solução durante o teste em cada navegador, mas não com o Firefox.

Tente o seguinte:

 RewriteEngine on RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost [NC] RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost.*$ [NC] RewriteRule \.(gif|jpg)$ - [F] 

Retorna 403, se você acessar imagens diretamente, mas permite que elas sejam exibidas no site.

Nota: É possível que quando você abre alguma página com imagem e copie o caminho da imagem na barra de endereços, você pode ver essa imagem, é apenas por causa do cache do navegador, na verdade que a imagem não foi carregada do servidor ( de Davo, comentário completo abaixo) .

A regra de rosipov funciona muito bem!

Eu uso em sites ao vivo para exibir uma mensagem em branco ou especial;) no lugar de uma tentativa de access direto aos arquivos que eu prefiro proteger um pouco da visualização direta. Eu acho que é mais divertido do que um 403 Proibido.

Então, pegando a regra do rosipov para redirect qualquer requisição direta para os arquivos {gif, jpg, js, txt} para ‘messageforcurious’:

 RewriteEngine on RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd [NC] RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.ltd.*$ [NC] RewriteRule \.(gif|jpg|js|txt)$ /messageforcurious [L] 

Eu vejo isso como uma maneira educada de proibir o access direto a arquivos sensíveis ao CMS como xml, javascript … com a segurança em mente: para todos esses bots rabiscando a web hoje em dia, eu me pergunto o que eles farão com o meu messageforcurious ‘.

Com base nos seus comentários, parece que você precisa disso:

 RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost/ [NC] RewriteRule \.(jpe?g|gif|bmp|png)$ - [F,NC] 

Eu testei no meu localhost e parece estar funcionando bem.

Primeiro de tudo, encontre onde o arquivo de configuração principal do apache httpd.conf está localizado. Se você usa Debian, deve estar aqui: /etc/apache/httpd.conf . Usando algum editor de arquivos como o Vim ou o Nano, abra este arquivo e encontre a linha que se parece com a seguinte:

 Options Includes Indexes FollowSymLinks MultiViews 

em seguida, remova a palavra Índices e salve o arquivo. A linha deve se parecer com esta:

 Options Includes FollowSymLinks MultiViews 

Depois disso, reinicie o apache (por exemplo /etc/init.d/apache restart no Debian). É isso aí!