.htaccess es un archivo de texto oculto que permite personalizar el funcionamiento del servidor Apache en un directorio concreto sin necesidad de modificar el fichero de configuración principal, el “httpd.conf”.
Cuando un cliente web solicita un archivo al servidor, este busca desde el directorio raíz hasta el subdirectorio que contiene el archivo solicitado el archivo .htaccess y tiene en cuenta estas reglas antes de proceder con la petición, se aplican las normas especificadas al directorio en el que se encuentre .htaccess y los directorios por debajo de él. Los usos principales del .htpaccess son:
En apache la autentificación puede estar gestionada por distintos módulos, dependiendo de la forma de implementación. Si se decide llevar a cabo gestionando los ficheros con listas de usuarios y contraseñas (encriptadas), se deberá utilizar el módulo mod_auth. Sin embargo, si se decide llevarla a cabo mediante base de datos, se deberán utilizar los módulos mod_auth_dbm.
Para poder llevar a cabo la configuración de autentificación, autorización y control de acceso, es necesario tener la directiva AllowOverride del fichero httpd.conf con el valor AuthConfig, para así permitir el uso de las distintas directivas de autentificación.
1. Impedir el listado del contenido de un directorio:
Cuando se intenta acceder a un directorio, en ausencia de un archivo índice, Apache por defecto muestra el contenido del directorio. Para evitarlo crear un archivo .htaccess que contenga la línea:
Options –Indexes
También se puede utilizar la directiva DirectoryIndex, que especifica qué archivos actúan como índice por defecto:
DirectoryIndex index.php index.html index.htm
2. Redireccionar el tráfico web:
Si quieres enviar al usuario a una determinada dirección web cuando pida una página, por ejemplo porque se ha movido, podemos utilizar la directiva Redirect:
Redirect [ruta]/antiguo.htm http://www.web.com/nuevo.htm
3. Personalizar las páginas de error:
Este es uno de los usos más frecuentes para el archivo .htaccess. Para lograrlo utilizamos la directiva ErrorDocument, del que pongo un ejemplo a continuación con las tres formas de uso posible:
ErrorDocument 403 “Acceso denegado
ErrorDocument 404 /error/404.php
ErrorDocument 500 http://www.url.com/500.php
Los códigos de error 403, 404 y 500 son los más comunes, y se producen respectivamente cuando no se tiene permiso para acceder a una página, cuando no se encuentra un archivo y debido a un error interno del servidor. Si te interesa, en la wikipedia se puede consultar los códigos de estado HTTP.
4. Restringir el acceso a determinados archivos:
El método de autenficación Básica de Apache, donde se limita todo tipo de acceso (GET, POST y HEAD) a un determinado directorio:
AuthType Basic
AuthName “Directorio Protegido”
AuthUserFile /var/www/dir/.htpasswd
require valid-user
AuthType Basic indica el método de autentificación que deseamos usar. En este caso el método de autentificación básico.
AuthName indica el nombre que deseas darle al recurso. Este nombre aparecerá en la ventanita de autentificación donde el usuario tiene que introducir su nombre de usuario y contraseña, por lo que es recomendable darle un nombre descriptivo.
AuthUserFile debe indicar la ubicación completa del fichero que contiene los datos de los usuarios (nombre de usuario y contraseña). No es válido indicar una ubicación relativa.
La sentencia “require valid-user” indica que se limitará todo acceso ya sea de tipo GET, POST o HEAD y que solo se permitirá el acceso a los usuarios que aparezcan en el fichero “.htpasswd”.
Suponiendo que aún no dispones del fichero .htpasswd, que deseas crearlo en /var/www/dir y que quieres permitir el acceso al usuario “pepito”, debes ejecutar el siguiente comando en la línea de comandos:
$ htpasswd -c /var/www/dir/.htpasswd pepito
Para añadir un nuevo usuario a un fichero “.htpasswd” ya existente, ejecuta el siguiente comando:
$ htpasswd /var/www/dir/.htpasswd nuevo_usuario
Cada vez que se ejecute cualquiera de los comandos mencionados pedirá la contraseña del nuevo usuario.
En sistemas Unix. Linux, BSD, el fichero se debe crear (y actualizar) mediante la herramienta htpasswd de Apache. En sistemas Windows se puede hacer manualmente (sin encriptar las contraseñas) o usando htpasswd.
5. Impedir el acceso a determinadas IPs o rangos de IP:
Con esta función se puede negar el acceso al sitio, o parte de el, a uno o más maquinas usando el número IP de estas:
deny from 128.23.45. (Todas las ips de esta subred)
deny from 207.158.255.213
allow from all
4 COMENTARIOS
[…] el fichero de configuración principal, el “httpd.conf” no es una tarea sencilla. Aunque ya he explicado su funcionamiento, la mejor manera de “cogerle el tranquillo” es practicar su funcionamiento y ver el […]
Muy interesante este artículo!!!
me ha servido para poder saber porque no actuaba el .htaccess con los rangos de ip que le ponía que bloqueara.
Una pregunta. ¿Alguien sabe como “juntar” varios rangos de ip de varios paises?
Quiero decir. Yo voy al COUNTRY IP BLOCKS, me genera el rango de ips de russia y luego el de noruega (por poner 2)… sabeis de algun sitio donde los “junte” los rangos que se “pisan”. O sea, si russia tiene un 62.1.2.1/62.1.4.255 y luego 62.1.6.1/62.1.10.255
y noruega tiene ese 62.1.5.1/62.1.5.255 que falta en medio de rusia si los puede unir para tener todo el rango bloqueado.
Es que veo que los ficheros .htaccess a la que bloqueas 4 sitios crecen de manera increible.
Saludos.
Hola muy interesante el documento, estoy haciendo un proyecto donde tengo unos videos que son de descarga paga alguna idea como podria hacer para proter la url del video y que no se pueda acceder a el mas que por la pagina de descarga despues del pago. agradezco su ayuda
no tengo acceso al httpd.conf y cuando escribo en el .htaccess. en conclusión me sale este error.
—-
[23-Jun-2010 18:30:51] PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/local/lib/php/extensions/no-debug-non-zts-20060613/pdo_mysql.so’ – /usr/local/lib/php/extensions/no-debug-non-zts-20060613/pdo_mysql.so:
cannot open shared object file: No such file or directory in Unknown on line 0
[23-Jun-2010 18:30:51]
PHP Warning: Cannot load module ‘pdo_sqlite’ because required module ‘pdo’ is not loaded in Unknown on line 0
—–
que puedo hacer?