¿Cómo evitar que un archivo tenga acceso directo a la URL?
Estoy usando Apache y tengo una carpeta web de muestra en mi host local , como:
http://localhost/test/
Archivos en la test
carpeta:
index.html
sample.jpg
.htaccess
Fuente de muestra de index.html
:
<html>
<body>
<img src="sample.jpg" />
</body>
</html>
Cuando ejecuto el sitio web en http://localhost/test/
, simplemente mostrará la imagen `sample.jpg' en la página.
Problema:
- Quiero evitar que la imagen se muestre
http://localhost/test/sample.jpg
directamente en la barra de URL.
Nota: Descubrí que las siguientes soluciones funcionan cuando se prueban en todos los navegadores excepto Firefox .
Pruebe 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 abres alguna página con una imagen y luego copias la ruta de esa imagen en la barra de direcciones puedas ver esa imagen, es solo por el caché del navegador, de hecho esa imagen no se ha cargado desde el servidor ( de Davo, comentario completo a continuación) .
¡La regla de Rosipov funciona muy bien!
Lo uso en sitios activos para mostrar un mensaje en blanco o especial;) en lugar de un intento de acceso directo a archivos que prefiero proteger un poco de la vista directa. Creo que es más divertido que un 403 Prohibido.
Entonces, 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, digamos, archivos sensibles de un CMS como xml, javascript... teniendo en cuenta la seguridad: para todos estos robots que rastrean la web hoy en día, me pregunto qué hará su algoritmo a partir de mi ' mensajeparacurioso'.
Según tus comentarios, esto es lo que necesitas:
RewriteCond %{HTTP_REFERER} !^http://(www\.)?localhost/ [NC]
RewriteRule \.(jpe?g|gif|bmp|png)$ - [F,NC]
Lo probé en mi servidor local y parece funcionar bien.
En primer lugar, busque dónde se encuentra el archivo de configuración principal de Apache httpd.conf. Si usas Debian, debería estar aquí: /etc/apache/httpd.conf
. Usando algún editor de archivos como Vim o Nano, abra este archivo y busque la línea que se ve así:
Options Includes Indexes FollowSymLinks MultiViews
luego elimine los índices de palabras y guarde el archivo. La línea debería verse así:
Options Includes FollowSymLinks MultiViews
Una vez hecho esto, reinicie Apache (por ejemplo, /etc/init.d/apache restart en Debian). ¡Eso es todo!