La ayuda del fichero .htacess es muy importante a la hora de configurar y establecer algunas reglas para servidores con NCSA, como lo son los HTTP Apache. Estos archivos sirven por ejemplo para asignar algunos permisos a ciertos usuarios, redireccionar, proteger directorios entre otras cosas que mas adelante voy a ir explicando.
¿Qué es realmente un archivo .htaccess?
Los archivos .htaccess son archivos de tipo texto que los usuarios tienen permitido poder gestionar los servidores compatibles con NCSA como mencionamos anteriormente, es una técnica que se desarrollo en los años 90 para esa década se había desarrollado el innovador servidor NCSA HTTPD que sus procesos están controlados por varios archivos httpd.conf. Esos archivos permiten definir las directivas para su configuración para todo un directorio.
Cada vez que algún usuario accede a la web el servidor escanea todos los directorios padre, el archivo .htaccess es un archivo que se encuentra dentro de estos directorios, los cambios realizados por un archivo .htaccess en la configuración misma del servidor son validos a partir de ese momento, esto sin necesidad de reiniciar el servidor, la configuración de la misma debe ser la correcta ya que si algo se encuentra mal escrito va a impedir el acceso al mismo, por lo general nos da un error http 500
Como crear un archivo .htaccess
Los archivos .htaccess son de texto sin formato y se pueden crear y modificar con cualquier editor de texto o IDE, el proceso para crear dependerá de la disponibilidad de acceso que tendrá en el servidor, un ejemplo es si el usuario se conecta por SSH podrá crear y editar el archivo directamente en el servidor siempre y cuando contenga permisos de escritura en el mismo, en el caso de solo tener acceso al servidor de forma FTP el archivo se puede crear de forma local y subirlo por medio del mismo. Siempre que se cree un archivo se debe colocar un punto al inicio luego el htaccess, los archivos con un punto al comienzo de un archivo en UNIX son archivos ocultos.
Hacks de .htaccess para configurar un servidor web
Aquí vamos a ir viendo algunas configuraciones que podemos realizar con estos archivos y que nos van a estar ayudando a tener una mejor web mas robusta y directamente con la configuración del servidor.
1. Mensaje de error 404 Páginas de error personalizadas
Cuando se hace presente un error al acceder a una web, por de forma predeterminada nos muestra un error con un código, cada código representa un tipo de error en especifico, existen varios números pero solo vamos a tratar con los mas comunes y el primero que vamos a hablar es el error 404 que nos indica que la pagina que esta intentando acceder no existe. Para poder mostrar una pagina personalizada de la misma podemos indicar el archivo que deseamos mostrar de este modo:
Este caso la pagina de error se encuentra fuera del directorio raíz, entonces indicamos la ruta de la misma donde se encuentra el archivo que deseamos mostrar
# Mensaje de error personalizado en ubicación local ErrorDocument 404 /ruta-de-acceso/404.html
En caso de que la página de error se encuentre fuera del directorio raíz o en una URL externa, también es posible modificarla.
# Mensaje de error personalizado en ubicación local ErrorDocument 404 http:// www.dominio.tld/ruta-de-acceso/404.html
2. Redirecciones con .htaccess
Uno de ejemplos mas utilizados son las redirección en especial en el mundo del SEO, estas pueden ser dentro de una misma web como redirigir todo el trafico a una nuevo dominio, esto resulta muy practico al momento de realizar un cambio de dominio pero ojo si estas trabajando en el SEO de una web esto va a ser afectado al momento de realizar asi que a tener mucho cuidado al momento de realizar esta redirección
# Redirección simple Redirect /http://www. nuevo-dominio.tld/
También es posible realizar la redirección de archivos individuales dentro de una misma web, esto se puede aplicar en el caso de cambio de nombre de alguna categoría o se haya movido una pagina a otra
# Redirección de archivos Redirect /antigua-web.html http:// www.nueva-web.html
3. Áreas protegidas por contraseña (seguridad con .htaccess)
En algunos casos es necesario proteger alguna carpeta con acceso controlado, también la configuración misma del .htaccess nos permite realizar estas acciones, para ellos vamos a necesitar de dos archivos, el primero hablamos del .htaccess y el segundo de .htpasswd donde se van a almacenar el usuario y contraseña, los sistemas UNIX solamente van a poder ser aceptados los archivos .htpasswd que hayan sido previamente cifrados, para este fin es normal encontrar diferentes tipos de generadores de estos archivos, para poder proteger un directorio con contraseña mediante .htaccess es posible implementando de la siguiente manera:
# Protección con contraseña simple de .htaccess AuthType Basic AuthName "Área protegida" AuthUserFile //.htpasswd AuthPGAuthoritative Off require user User1 User2 User3
Además se tendrá que crear un archivo .htpasswd para cada usuario con sus contraseñas cifradas de este modo
# archivo .htpasswd para nombres de usuario contraseña User1:duCmo1zxkKx6Y User2:mou3IYjSLpGWI User3:HGKS9XzDXXAXQ
Lo mas recomendable es que el archivo .htpasswd sea guardado en la raíz del sitio web junto con el archivo .htpasswd para no tener problemas de rutas al momento de implementar y que luego no sea posible acceder.
4. Aumentar la memoria límite de PHP con .htaccess
Las aplicaciones PHP se encuentran sujetas por un limite de memoria predeterminado, este limite determina el uso máximo de memoria que puede ocupar los scripts PHP dentro de un servidor web. Utilizando el siguiente comando dentro del .htaccess es posible realizar un aumento de la capacidad del mismo, como mencionamos anteriormente podemos realizar algunas configuraciones inclusive sin tener acceso al php.ini y sin reiniciar el servidor.
# PHP Memory Limit php_value memory_limit 128M
El valor “128M” se refiere, en este caso, a un límite de 128 megabytes. Dependiendo de los requisitos de almacenamiento y del servidor, es posible fijar otros límites.
5. Cambiar la zona horaria del servidor
Este es otro ejemplo donde podemos realizar una modificación del servidor sin tener acceso al servidor, incluso esto puede servir en el caso de tener varias aplicaciones dentro de un servidor con distintos huso horario, simplemente con esta línea de comando del .htaccess se puede modificar:
# Establecer zona horariaSetEnv TZ Europe/Madrid
6. Bloquear direcciones IP con .htaccess
Parte de la seguridad que nos puede brindar el .htaccess es denegar el acceso de algunas direcciones IP a un sitio web, con algunos ajustes es posible utilizar el archivo .htaccess para que excluya las direcciones IP que le indiquemos, esto puede ser impleentado para que solo desde la intranet tenga acceso a ciertas paginas dentro de la web o simplemente ciertas direcciones IP puedan acceder al contenido del mismo para eso debemos realizar lo siguiente:
# Archivo para la regulación de accesos IP Order deny,allow Deny from .aol.com Deny from 192.168 Allow from 192.168.220.102
7. Redirección de HTTP a HTTPS con .htaccess
Algunas veces la configuración de los certificados SSL dentro del apache no se realiza correctamente y no realiza las redirecciones al puerto 443 o al https de todo el trafico entrante para eso podemos utilizar la siguiente línea de comando del .htaccess para realizar esa tarea
Obs la redireccion 301 que se muestra en el siguiente ejemplo es una redirección permanente
# Activar HTTPS RewriteEngine On RewriteCond %{Server_Port} !=443 RewriteRule ^(.*)$ http:// www.tu-dominio.tld/$1 [R=301,L]
8. Permitir el acceso a datos a través del navegador con .htaccess
Con la siguiente línea de comando, el contenido que se encuentra en el directorio se podrá visualizar dentro del navegador y se encontrara disponible para que los usuarios puedan realizar una descarga del mismo.
# Mostrar contenido del directorio Options +Indexes
9. Prevenir hotlinking de imágenes con .htacess
El termino hotlinking hace una referencia a la acción en que otra web enlaza un archivo, normalmente puede ser una imagen alojado en otro servidor, generando un mayor volumen de datos al servidor web, usando algunos trucos de .htaccess podemos evitar y bloquear el acceso a ciertos tipos de archivos, se puede agregar todos los necesarios agregando la extensión de la misma de la siguiente manera:
# Prevenir hotlinking RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://tu-dominio/.*$ [NC] [OR] RewriteCond %{HTTP_REFERER} !^http://www.tu-dominio/.*$ [NC] [OR] RewriteRule .*\.(gif|GIF|jpg|JPG|bmp|BMP|wav|mp3|wmv|avi|mpeg)$ - [F]
10. Especificar la codificación de los documentos
Los acentos suelen ser problemáticos cuando no existe un charset adecuado en especial cuando trabajamos con un sitio en español. Un fichero .htaccess puede determinar exactamente qué codificación de caracteres usar para cada tipo de documento. Con el siguiente comando es posible codificar todos los documentos bajo el UTF-8:
# Especificar códificación de caracteres con .htaccess AddDefaultCharset utf-8
11. Evitar ejecutar PHP, HTML o cualquier otro tipo de archivo con .htaccess
En el caso de trabajar subiendo archivos dentro de una carpeta siempre existe el riesgo de terminar con las puertas abierta a los hackers para que nos suban algún archivo no deseado, con esta técnica lo que vamos a realizar es evitar que el archivo en ciertas carpetas ejecuten código, para eso debemos crear un archivo .htaccess en cada carpeta donde no deseamos que se ejecuten estos archivos y con esta simple línea de comando lo podemos evitar:
RemoveHandler .phtml .php3 .php .pl .py .jsp .asp .htm .shtml .sh .cgi .dat RemoveType .phtml .php3 .php .pl .py .jsp .asp .htm .shtml .sh .cgi .dat
12. Evitar listar contenido de directorio con .htaccess
En algunos casos necesitamos evitar listar todo el contenido de un directorio, muchas veces con solo colocar un index.html dentro de cada directorio ya es mas que suficiente, pero que pasa si nos olvidamos de colocar en alguno o si son muchos los directorios que deseamos restringir el listado, en este caso lo que realizamos con el .htaccess es prohibir el listado con este simple comnado
Options -Indexes