
Los archivos .htaccess son contenedores de reglas que el servidor web Apache reconocerá a la hora de cargar tu sitio. Estos archivos son muy útiles antes y durante la construcción de una web, por ello presento 20 ejemplos de cómo podemos sacar provecho de las funcionalidades que brinda.
Preparación
Antes que nada debemos asegurarnos de que los archivos .htaccess realmente esten habilitados en nuestro servidor Apache. Para ello es necesario y suficiente que en /etc/apache2/site-available/default se incluya la opción:
AllowOverride All
en la definición de los directorios que deseemos utilizar.
Los 20 ejemplos
1) Personalizar el Error 404
Se puede personalizar el clásico error 404 de página no encontrada añadiendo esta línea a tu archivo .htaccess:
ErrorDocument 404: "Esta página no esta disponible"
o bien redirigir a un archivo (por ejemplo html):
ErrorDocument 404 /error404.html
De esta misma manera se puede hacer con los demas errores como el 403 de acceso denegado.
2) Protección a un directorio
Se puede proteger directorios con usuario y contraseña, esto es útil para controlar quienes pueden navegar los archivos o no. Primero se debe crear un archivo .htpasswd que es donde se guardará los datos del usuario. Este archivo puede estar en el directorio raíz pero NO en el que queremos proteger.
Creamos el archivo .htpasswd
$ touch /var/www/misitio/.htpasswd
y luego para dar de alta a un usuario podemos escoger dos caminos, uno es utilizando una herramienta online que encriptará la contraseña que ingresemos, luego tan solo debemos copiar y pegar lo que nos devuelva en el archivo .htpasswd. El otro camino es utilizando el comando htpasswd de la siguiente forma:
$ htpasswd /var/www/misitio/.htpasswd admin
a continuación nos pedirá que ingresemos una contraseña y listo esta cuenta queda guardada en el archivo. Ahora solo falta crear el .htaccess para el directorio que queremos proteger, para ello nos dirigimos a ese directorio y dentro de el creamos un archivo .htaccess y escribimos lo siguiente:
AuthName "Este directorio es
privado"
AuthUserFile
/var/www/misitio/.htpasswd
AuthType basic
Require valid-user
3) Evitar navegar los directorios
Es muy sencillo evitar que se navegue el contenido de los directorios del nuestro sitio, para ello basta con agregar la siguiente línea al .htaccess que esta en la raíz:
Options All -Indexes
4) Bloqueo de IPs
En caso de un ataque o por razones de seguridad puede ser necesario bannear una ip:
Order allow, deny
Deny from
xxx.xxx.xxx.xxx
Allow from all
Cambia xxx.xxx.xxx.xxx por la ip que desees bannear o en vez de una dirección ip puede ser un dominio:
Order allow, deny
Deny from
dominio.banneado.com
Allow from all
5) Límite de visitas
Esta opción limita el número de visitantes a tu sitio a 300 en el mismo momento:
MaxClients 300
6) Cambiar la página principal
Con esta opción le indicas al servidor que tu página de inicio no es la típica index sino la que tu desees:
DirectoryIndex otroindex.html
7) Redireccionamiento
Existen muchas formas de redireccionar a tus visitantes a otro lugar. Estos son algunos de ellos:
Redirect / /otro_dir/
Redirect /index.php /nuevo.php
Redirect
/files/doc.zip http://nuevo.com/files/doc.zip
8) Anti hot linking
El hot link es la acción de enlazar en un sitio ajeno un archivo que esta alojado en nuestro servidor. Esto implica consumo de ancho de banda y es algo indeseable por ello se puede aplicar la siguiente regla:
RewriteEngine On
RewriteCond % !^$
RewriteCond %
!^http://(www\.)?dominio.com/.*$ [NC]
RewriteRule
^.*\.(bmp|tif|gif|jpg|jpeg|jpe|png)$b - [F]
9) Obligar a descargar archivos
Esta opción obliga a que los archivos no sean abiertos en el navegador sino descargados por el cliente:
AddType application/octet-stream
.avi
AddType application/octet-stream .mpg
AddType application/octet-stream .txt
AddType application/octet-stream .pdf .odt
.doc
Para uno en particular sería:
<Files
archivo_particular.txt>
AddType
application/octet-stream txt
</Files>
10) Configuración del host
Puedes escribir tu configuración personalizada:
#Indica el orden de precedencia
de ejecución de los index
DirectoryIndex index.html index.php index.htm
#El lenguaje por defecto
DefaultLanguage
es-ES
#La codificación por defecto
AddDefaultCharset UTF-8
#Activar (on),
desactivar (off) o mostrar email (email) para la
firma del sevidor en los mensajes
ServerSignature Off
#Establecer el email
del administrador
SetEnv SERVER_ADMIN
webmaster@dominio.com
11) Protección de archivos
Deniega el acceso a los archivos que especifiques:
#protege los .htaccess,
.htpasswd, .ini, .log
<FilesMatch
"\.(htaccess|htpasswd|ini|log)$">
Order Allow,Deny
Deny from all
</FilesMatch>
#Protege un
archivo en particular y pide contraseña
<Files config.php>
Order deny,allow
Deny from all
AuthName "Acceso
restringido"
AuthType Basic
AuthUserFile /.htpasswd
Require valid-user
</Files>
12) Permitir el acceso sólo a algunas IPs o dominios
Similar al ejemplo anterior protegemos un directorio o el directorio raíz y solo permitimos el acceso a quien deseemos:
Order deny,allow
Deny from
all
Allow from 192.168.0.1 192.168.0.2
Allow from www.exclusivo.com
13) Redireccionar todo el tráfico menos una ip o dominio
Este tipo de redireccionamiento es muy útil cuando el sitio esta bajo construcción:
ErrorDocument 403
http://www.nuevositio.com
Order deny,allow
Deny from all
Allow from
200.10.45.120
Allow from
desarrolladores.com
14) Limitar los tipos de archivos a subir (upload)
Se puede controlar que tipos de archivos permitimos subir desde un cliente a nuestro sitio de la siguiente forma:
AddType image/jpeg .jpg
AddType text/plain .txt .xml .html .css
15) Evitar mostrar ciertos tipos de archivos
Este ejemplo ignorará la existencia de archivos de la extensión indicada:
IndexIgnore *mp3 *.avi *.mpeg
16) Determinar el tiempo en caché de los archivos
Con el fin de optimizar y agilizar tu sitio puedes determinar el tiempo en caché según el tipo de archivo que sea de acceso público (el tiempo esta expreasado en segundos):
# 1 mes
<FilesMatch
"\.(flv|ico|pdf|avi|mov|ppt|doc|mp3|wmv|wav)$">
Header set Cache-Control "max-age=6480000,
public"
</FilesMatch>
# 1
semana
<FilesMatch
"\.(jpg|jpeg|png|gif|swf)$">
Header set
Cache-Control "max-age=604800, public"
</FilesMatch>
# 1 hora
<FilesMatch "\.(txt|xml|js|css)$">
Header set Cache-Control "max-age=3600"
</FilesMatch>
# No usar
caché
<FilesMatch
"\.(html|htm|php|cgi|pl)$">
Header set
Cache-Control "max-age=0, private, no-store,
no-cache, must-revalidate"
</FilesMatch>
17) Redirecciona los logs
Con esta regla podrás ver los logs del servidor en un archivo de texto:
ErrorLog /files/error.log
18) Obligar a escribir www
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
RewriteCond % !^www\.dominio\.com$
[NC]
RewriteRule ^(.*)$
http://www.dominio.com/$1 [R=301,L]
19) Desahabilitar la ejecución de scripts indeseados
Options -ExecCGI
AddHandler
cgi-script .php .pl .py .jsp .asp .sh .cgi
20) Dengar métodos de comunicación
RewriteCond %
!^(GET|HEAD|OPTIONS|POST|PUT)
RewriteRule .*
- [F]
Toda una colección de ejemplos en AskApache

Soy un novato total y no tengo ni idea. He protegido todo mi site tal y como tu explicas con el htaccess y el htpasswd. Ahora lo que me gustaría es
que según quien se logee, que vaya a una pagina de inicio personalizada.
Es decir, quiero tener un Home personalizado para cada user según vayan accediendo a la web. Es possible? podrias sugerirme como?o ayudarme en donde
buscar?? muchas gracias por la ayuda!!!!!!!!!!!!!
/etc/apache2/site-available/default en los bloques VirtualHost aqui puedes ver una configuración básica:
http://www.larepaweb.com.ar/index.php?id=article&a=526
Espero que ayude.
usuarios admitidos. Lo que quiero es que por ejemplo si quien se loguea es Luis, vaya a una pagina home para poder poner Hola Luis...
Pero si se conecta Raul, quiero que vaya a otro home que diga Hola Raul..
es esto possible? ademas estoy teniendo problemas con mi htpasswd y/o htaccess. De repente peta en Firefox todo. Me pide una y otra vez la
contraseña. COmo si no la reconociese o fuese incorrecta. En safari no me pasa (uso mac) alguna idea?
muchas gracias!!!!!!!!!!!
http://php.net/manual/en/features.http-auth.php
http://tutorialphp.net/cap8_2seguridad_distincion_de_usuarios_php.php
http://www.hospedajeydominios.com/mambo/documentacion-manual_php-pagina-features_http_auth.html
Suerte.