apache server

Forzar la descarga de archivos en Apache con .htaccess e IIS con web.config

Cuando tenemos una página web, hay ocasiones en la que queremos que un fichero se descargue, por ejemplo si queremos hacer un sistema de almacenamiento tipo dropbox o simplemente unos pdf que tenemos en nuestra web. Normalmente cuando tenemos un archivo como un pdf, tradicionalmente este siempre se descargaba al abrirlo, pero con los avances en los navegadores, cada día mas potentes, nos dan previsualizadores de pdf, por lo que ya por defecto no se descarga porque los vemos online.

En este ejemplo hablo de pdf, pero se puede llevar a cualquier tipo de archivo, incluso un .html. Un archivo pdf tiene como MIME application/pdf, pero ¿Qué es un MIME? Un MIME es un estándar que define tipos de ficheros en base a una categoría y una subcategoría, por ejemplo, un pdf de tipo application/pdf quiere decir que es un archivo de aplicación del tipo pdf. Otros ejemplos de MIME son de imágenes como el image/jpeg o de texto en html text/html. Cuando un navegador abre un pdf, el servidor tiene por defecto configurado indicar que el archivo es de tipo application/pdf que se indica en la cabecera de http Content-Type.

Tras esta breve explicación, a veces pasa, que no todos los navegadores tienen visores de pdf, por los que algunos como pasa con algunas versiones de Firefox o Internet Explorer se descarguen los archivos, mientras que Safari o Chrome los visualicen online. Pero claro, este comportamiento no es muy elegante ya que quizás sea necesario que se comporte igual en todos los navegadores y tengamos que hacer que siempre se descargue el archivo y esto ya depende del servidor.

Para forzar la descarga de archivos, como el ejemplo que tratamos, un .pdf, tendremos que redefinir un MIME asociado a una extensión, es este caso diremos que es un octet-stream o un stream de bytes (un archivo binario). Al entender el navegador, que el archivo se trata de un archivo binario, no intentara leerlo sino que lo descargará independientemente de la extensión que tenga.

Forzar la descarga de archivos en Apache con .htaccess

Tan solo tenemos que añadir una nueva entrada AddType donde definiremos que los archivos .pdf son binarios y por tanto el navegador los descargará:

AddType application/octet-stream .pdf

Forzar la descarga de archivos en IIS con web.config

Al igual que con apache, deberemos indicar al servidor que el tipo de archivo .pdf es un binario:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <staticContent>
      <mimeMap fileExtension=".pdf" mimeType="application/octet-stream" />
    </staticContent>
  </system.webServer>
</configuration>

Apache y directorios de usuarios (UserDir)

Recuerdo que en un trabajo en el que estube, cada uno tenia un usuario de Unix (era FreeBSD) y cada usuario tenia en su home una carpeta public_html para que no tuvieramos que usar todos y darnos permisos en /var/www.

Ahora al instalar Ubuntu en el portatil, quiero volver a poner todas las webs que tenia en local pero claro, no le voy a dar permisos a /var/www y aunque solo yo usare el portatil, no estaria de mas tener un sistema para que en la home de cada usuario exista una carpeta public_html en la cual cada usuario ponga las webs que quiera.

Este sistema que era desconocido para mi, se llama UserDir. Para instalarlo si estamos en Ubuntu, lo unico que tendremos que hacer es buscar en el Synaptic un paquete llamado libapache2-mod-ldap-userdir, o mas facil, buscar directamente «UserDir» y nos aparecera el paquete en cuestion. Una vez instalado, deberemos de ir a la carpeta /etc/apache2/mods-available y copiaremos o moveremos los archivos userdir.conf y userdir.load a la carepta /etc/apache2/mods-enabled. Una vez copiados los archivos, abriremos una consola y ejecutaremos el comando «/etc/init.d/apache2 restart» para reiniciar apache.

Una vez reiniciado apache, y copiados las configuraciones, ya lo tenemos todo listo. Ahora toca probarlo, asi que iremos a la home de nuestro usuario /home/nombreusuario y creamos una nueva carpeta public_html, una vez hecho esto, creamos un index.html de prueba, abrimos nuestro navegador y escribimos http://localhost/~nombreusuario y deberia de aparecernos nuestra pagina de inicio que creamos.

Asi de sopeton puede parecer algo complicado, pero luego son 2 tonterias que no nos llevara mas de 2 minutos configurarlo.

Aparte de esto, si abrimos el archivo userdir.conf, podremos modificar las reglas para cambiar el directorio public_html de la home y ponerlo en otro lugar.

Scroll al inicio