Problema: No queremos usuarios apache
Algunas veces nos encontramos que queremos restringir el acceso a documentos de una carpeta de forma que solo unos usuarios puedan acceder a ellos, independientemente si están validados y usando nuestra aplicación o están accediendo de forma directa al archivo mediante una url.
Podríamos restringir el acceso mediante usuarios de apache, pero nosotros queremos almacenar usuarios y contraseñas desde la gestión de nuestra aplicación web.
Solución: Combinar php con htaccess
En nuestro fichero .htaccess añadimos las siguientes lineas:
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_URI} ^\/(ruta a la carpeta)\/.*$
RewriteRule !^((.*.php)|(.*\/))$ acceso.php
En el fichero «acceso.php» es donde programamos la validación. Según cada caso validaremos que tengamos la sesión activa, la cookie, conectaremos con la base de datos, solicitaremos usuario o contraseña, etc, etc. Cada cual que haga lo que necesite, pero para mostrar el contenido, si la validación es la correcta, necesitaremos el siguiente código:
if($tengoacceso){
// COMPRUEBO QUE EL FICHERO EXISTE
if(file_exists($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'])){
// OBTENGO EL CONTENIDO DEL FICHERO
$fp = fopen($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'], 'r');
// OBTENGO EL MIME Y DEFINO EL HEADER DEL CONTENIDO QUE VOY A LANZAR
header('Content-type: '.mime_content_type($_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI']));
// LO ENVIO AL NAVEGADOR Y LISTO
fpassthru($fp);
fclose($fp);
}else{
// NO SE HA ENCONTRADO EL FICHERO -> SUGERENCIA: REDIRIGE A UN 404
header("http://www........")
}
}else{
// NO TENGO ACCESO -> SUGERENCIA: REDIRIGE A UNA PAGINA DE ERROR
header("http://www........");
}
Ya está todo. Con esos dos sencillos pasos podemos tener nuestro contenido bien protegido.

