(htaccess) ¿Cómo evitar que un archivo tenga ACCESO DIRECTO a la URL?


Este es mi segundo post para el mismo problema. Coz el post anterior necesitaba un poco más de ejemplo.

Ok, digamos de nuevo, estoy usando Apache y tengo una carpeta web de ejemplo (en mi Localhost) como:

En la carpeta, los archivos serán:

  • índice.html
  • muestra.jpg
  • .htaccess

El " índice.html" simplemente incluirá:

<html>
<body>
    <img src="sample.jpg" />
</body>
</html>

Cuando ejecute el sitio web en http://localhost/test/, simplemente se mostrará la muestra de la imagen.jpg' en la página.

ENTONCES EL PROBLEMA AQUÍ ES :

  • Quiero evitar que la imagen se muestre como http://localhost/test/sample.jpg directamente en la barra de url.

Nota:
Después de un día de obtener respuestas a continuación, encontré que todas las soluciones funcionan lógicamente, pero el problema con Firefox. Quiero decir, las siguientes respuestas están dando la solución mientras se prueba en todos los navegadores, pero no con Firefox.

Author: 夏期劇場, 2012-04-20

4 answers

Intente lo siguiente:

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

Devuelve 403, si accede a las imágenes directamente, pero permite que se muestren en el sitio.

Nota: Es posible que cuando se abre una página con imagen y luego se copia la ruta de esa imagen en la barra de direcciones se puede ver esa imagen, es solo debido a la caché del navegador, de hecho, que la imagen no se ha cargado desde el servidor (de Davo, comentario completo a continuación).

 93
Author: Ruslan Osipov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-10 17:07:07

El gobierno de Rosipov funciona muy bien!

Lo uso en sitios en vivo para mostrar un mensaje en blanco o especial ;) en lugar de un intento de acceso directo a los archivos, prefiero proteger un poco de la vista directa. Creo que es más divertido que un 403 Prohibido.

Así que tomando la regla de rosipov para redirigir cualquier solicitud directa a archivos {gif, jpg, js, txt} a '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]

Lo veo como una forma educada de no permitir el acceso directo a, por ejemplo, un CMS archivos sensibles como xml, javascript... con la seguridad en mente: A todos estos bots garabateando la web hoy en día, me pregunto qué hará su algo de mi 'messageforcurious'.

 22
Author: tuk0z,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-27 20:43:22

Basado en tus comentarios parece que esto es lo que necesitas:

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

He probado en mi localhost y parece estar funcionando bien.

 7
Author: anubhava,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-04-19 21:05:55

En primer lugar, encontrar donde el archivo de configuración principal de apache httpd.conf se encuentra. Si usa Debian, debería estar aquí: /etc/apache/httpd.conf. Usando algún editor de archivos como Vim o Nano abrir este archivo y encontrar la línea que se ve de la siguiente manera:

Options Includes Indexes FollowSymLinks MultiViews

Luego elimine los índices de word y guarde el archivo. La línea debe tener este aspecto:

Options Includes FollowSymLinks MultiViews

Una vez hecho esto, reinicie apache (por ejemplo /etc/init.d / apache restart en Debian). ¡Eso es!

 7
Author: Kaushal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-20 06:17:47