Está en la página 1de 15

Tutorial de .

htaccess
Posted on April 3, 2006
Para aquellos que pelean contra WP y el formato de links. Y tambin para quien lo necesite una pequea
recopilacin de consejos para poder crear y modificar el archivo misterioso que todo lo puede :p.
Notas de traduccin
Esta traduccin fue realizada bajo permiso expreso y por escrito en e-mail del autor: Paolo
Tagliaferri (que le manda saludos a Pampita)
Tanto el artculo original como su traduccin se encuentra bajo licencia Creative Commons
Atribucin-NoComercial-SinDerivadas
Los vnculos fueron mantenidos as que stos seguramente se encontrar en ingls
Artculo Original: Apache .htaccess tweaking tutorial
Si a alguien se le ocurre algo para agregar/modificar/corregir al tutorial slo deje un comentario y vemos
cmo hacemos.
La traduccin
En este tutorial mejoraremos nuestro sitio web modificando el archivo .htaccess.Por qu escrib este
artculo? Porque en la red encontr un montn de artculos sobre esta pequea bestia pero cada uno de ellos
englobaba un problema en particular y no el uso general del archivo, o eran demasiado grandes cuando uno
necesitaba algo en poco tiempo. Por lo que estoy intentando recopilar todas los datos tiles en un tutorial
sencillo pero monoltico, que ser actualizado a medida que consiga ms informacin. Primero sin embargo,
veamos qu es un archivo .htaccess.
Esto es lo que dice la definicin de la wikipedia [en ingls]:
.htaccess (Acceso de Hiper-Texto) es el nombre por defecto del archivo de configuracin de directorios de
Apache. Provee de la habilidad para personalizar la configuracin de las directivas definidas en el archivo
de configuracin principal. Las directivas de configuracin necesitan estar en el contexto de .htaccess y el
usuario necesita los permisos apropiados.
Ahora veamos los problemas ms comunes.
ndice (ltima actualizacin: 28 de Febrero de 2006)
1. Control de acceso a carpetas
2. Listado de carpetas
3. Activacin de compresin
4. Escondiendo archivos
5. Pginas de error HTTP 404 personalizadas
6. Bloqueo de referers maliciosos Nada de hotlinking
7. Bloqueo de robots maliciosos
8. No mostrar wwww
9. Escondiendo la extensin del lenguaje de scripting
10. Consejos y trucos varios
11. Proteccin con contrasea mediante htpasswd
12. Activando SSI
13. Cambiando la pgina por defecto
14. Evitando el error 500
15. Directiva CheckSpelling [Control de Ortografa]
16. Agregar sumario MD5
17. Fuentes
18. Herramientas
Control de acceso a carpetas
Podras querer deshabilitar totalmente el acceso a una carpeta (por ejemplo, una carpeta con libreras de
programacin que se incluyen en los archivos principales. En este caso slo los archivos principales
accederna ellos mediante el sistema de archivos, pero no se podrn acceder via web). Bueno, simplemente
crea un archivo .htaccess en esa carpeta que contenga:
#deny all access
deny from all
Si se quiere permitir el acceso desde una IP especfica
#deny all access
deny from all
allow from 10.0.0.1
o para un rango especfico de IPs (forzado mediante la mscara de red)
allow from 192.168.0.0/24
tambin se puede bloquear el acceso a un archivo especfico
<Files privado.html>
Order allow,deny
Deny from all
Volver al ndice
Listado de carpetas
Si se quiere hacer las carpetas navegables, entonces necesitamos agregar esta lnea al archivo .htaccess
Options +Indexes +MultiViews +FollowSymlinks
Y esta si se tiene el mdulo apropiado en el servidor web

IndexOptions FancyIndexing

Tambin se podra querer prevenir el listado de carpetas
IndexIgnore *
Volver al ndice
Activar compresin
Se puede habilitar la compresin de datos inherente de PHP para ahorrar ancho de banda

php_value zlib.output_compression 16386

Volver al ndice
Escondiendo archivos
Para deshabilitar el acceso a un archivo en particula se puede utilizar una expresin regular y la directiva
Files para denegar acceso a cualquier archivo que comience con .ht
Se puede modificar esto para restringir un archivo en particular (como archivos de configuracin, robots.txt,
archivos de logs o lo que se desee).

Order allow,deny
Deny from all
Satisfy All

Volver al ndice
Pginas de error HTTP 404 personalizadas
Si se quisiera redireccionar los visitantes cada vez que se encuentran con una pgina de error HTTP 404,
utiliza ste cdigo:
ErrorDocument 404 /errores/noencontrado.html
Esto redirije el usuario hacia /errores/noencontrado.html cada vez que sucede un error 404. Obviamente, se
puede redefinir para que capture otros errores http (403, 5000, etc). Sigue leyendo para ver lo que encontr
Consejo: Internet Explorer tiene una funcionalidad poco documentada que previene la utilizacin de
cualquier pgina de error 404 personalizada que sea menor a 512 bytes de largo. Los visitantes sern
enviados, en cambio, a la pgina propia de IE, que es genrica y sugiere que utilizen una bsqueda en MSN
para buscar la informacin en internet. Esa es una forma de perder visitantes! Asegrate que tu pgina
personalizada est por sobre este lmite algo as como 10 lneas completas de texto y HTML deberan ser
suficientes.
Volver al ndice
Bloqueo de referers maliciosos Nada de hotlinking
Si se desea bloquera algunas partes del sitio de cualquier referer malicioso:

RewriteEngine on
RewriteCond %{HTTP_REFERER} ejemplo\.com [NC,OR]
RewriteCond %{HTTP_REFERER} otroejemplo\.com
RewriteRule .* - [F]

Utilizando el motor rewrite [de reescritura] se denegar el acceso al sitio a cualquier visitante que venga de
chicomalo.com u otrositiodesagradable.com. Para evitar el robo de ancho de banda, se puede bloquear el
acceso a un archivo en particular (o extensin de archivos).

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://([-a-z0-9]+\.)?example\.com[NC]
RewriteRule .*\.(zip|mp3|avi|wmv|mpg|mpeg)$ http://www.example.com/images/nohotlink.gif
[R,NC,L]

Esto dice: si el visitante no proviene de misitio.net, entonce redirije todos los pedidos de archivos
(zip,mp3,avi,wmv,mpg,mpeg) a una imagen que dice No permitimos hotlinking De esa forma, puedes
redirigir a una pgina, o lo que desees, o p uedes modificar la lista de extensones de archivo para
incluir/quitar otros archivos. Cuidado: cuando se decide bloquera el hotlinking de imgenes recuerda que
puedes estar bloqueando todo trfico fuera del alcance de tu dominio. Por ejemplo, si se posee un archivo de
sindicacin tomado por bloglines necesitars modificar la regla para permitirles a los lectores obtener las
imgenes o el RSS se ver mal.
Volver al ndice
Bloqueo de robots maliciosos
En algunos casos se querr bloquear algunos robots maliciosos, como spiders o descargadores. Para ello
utilizaremos mod_rewrite nuevamente. Normalmente los robots maliciosos ignoran el archivo de directivas
robots.txt por lo que se podra querer forzar un error 403 cada vez que quieran recorrer o descargar tu sitio:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR]
RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR]
RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [OR]
RewriteCond %{HTTP_USER_AGENT} ^Custo [OR]
RewriteCond %{HTTP_USER_AGENT} ^DISCo [OR]
RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [OR]
RewriteCond %{HTTP_USER_AGENT} ^eCatch [OR]
RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [OR]
RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [OR]
RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [OR]
RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [OR]
RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [OR]
RewriteCond %{HTTP_USER_AGENT} ^FlashGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetRight [OR]
RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [OR]
RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [OR]
RewriteCond %{HTTP_USER_AGENT} ^GrabNet [OR]
RewriteCond %{HTTP_USER_AGENT} ^Grafula [OR]
RewriteCond %{HTTP_USER_AGENT} ^HMView [OR]
RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^InterGET [OR]
RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [OR]
RewriteCond %{HTTP_USER_AGENT} ^JetCar [OR]
RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [OR]
RewriteCond %{HTTP_USER_AGENT} ^larbin [OR]
RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [OR]
RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [OR]
RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [OR]
RewriteCond %{HTTP_USER_AGENT} ^Navroad [OR]
RewriteCond %{HTTP_USER_AGENT} ^NearSite [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetAnts [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [OR]
RewriteCond %{HTTP_USER_AGENT} ^NetZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Octopus [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [OR]
RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [OR]
RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [OR]
RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [OR]
RewriteCond %{HTTP_USER_AGENT} ^pavuk [OR]
RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [OR]
RewriteCond %{HTTP_USER_AGENT} ^RealDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^ReGet [OR]
RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [OR]
RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperBot [OR]
RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Surfbot [OR]
RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [OR]
RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [OR]
RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [OR]
RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebAuto [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebCopier [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebFetch [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebReaper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebSauger [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [OR]
RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebStripper [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [OR]
RewriteCond %{HTTP_USER_AGENT} ^WebZIP [OR]
RewriteCond %{HTTP_USER_AGENT} ^Wget [OR]
RewriteCond %{HTTP_USER_AGENT} ^Widow [OR]
RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [OR]
RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [OR]
RewriteCond %{HTTP_USER_AGENT} ^Zeus
RewriteRule .* - [F]

(La lista se obtuvo de aqu)
Volver al ndice
No mostrar wwww
Para hacer esto, basta con una simple regla de re-escritura:

Options +FollowSymlinks
RewriteEngine on
RewriteCond %{http_host} ^www\.example\.com[nc]
RewriteRule ^(.*)$ http://example.com/$1 [r=301,nc]

Por qu querra quitar www? En ese link los fundamentos
Volver al ndice
Escondiendo la extensin del lenguaje de scripting
Se puede aumentar la seguridad cambiando la extensin de los scripts para que los visitantes desconozcan
qu lenguaje ests utilizando:
# Make PHP code look like unknown types
AddType application/x-httpd-php .cool
De esta forma, los archivos .cool sern tratados como si fuesen archivos PHP. Se deben renombrar los
archivos que se quiera con esta nueva extensin.
Volver al ndice
Consejos y trucos varios
Mantiene el archivo .htaccess pequeo: este archivo es procesado por el servidor web en cada
pedido (pudiendo causar problemas de performance).
Mantiene tu archivo .htaccess organizado. Utiliza comentarios (lneas que comienzan en #) y
se lgicamente consistente. Es complicado entender un archivo .htaccess desorganizado una
vez que crece lo suficiente.
Cuando se utilicen reglas de reescritura de URLs, agrega la opcin [L] a aquellas pginas
finales (como la de hotlinking y dems). Esto le dir al servidor que no procese ms reglas
(aumentando la performance).
Cuidado con la herencia: el archivo .htaccess a nivel raz es aplicado tambin en las carpetas,
cuaquier regla .htaccess en la carpeta puede reemplazar las reglas de la carpeta raz.
Volver al ndice
Proteccin con contrasea mediante .htpasswd
Esto es til cuando se quiere agregar una contrasea a ciertas pginas y/o archivos
Crea un archivo .htpasswd en la carpeta a protejer.
El archivo contendr la informacin de registro de la forma usuario:contrasea. El nombre
de usuario es en texto plano. La contrasea debe de estar encriptada o no funcionar. Utiliza
esta herramienta para saber qu texto agregar.
Si se crea el archivo en la PC local, acurdate de subirlo al servidor en modo ASCII.
Normalmente, se puede modificar el archivo .htaccess. La autenticacin se aplicar a la
carpeta en la que se encuentre y las subcarpetas.
AuthUserFile /home/pathto/.htpasswd
AuthType Basic
AuthName "Mi Carpeta Secreta"
require valid-user
Se puede protejer un slo archivo incluyendo este cdigo dentro de una directiva
Asegrate de protejer el acceso al archivo .htaccess utilizando el primer consejo.
Volver al ndice
Activando SSI
Utiliza stas instrucciones para activar la interpretacin SSI
AddType text/html .html
AddType text/html .shtml
AddHandler server-parsed .html
AddHandler server-parsed .shtml
Volver al ndice
Cambiando la pgina por defecto
Se puede utilizar esta instruccin para cambiar la pgina por defecto (el orden es importante)
DirectoryIndex inicio.html index.htm index.html index.php
Volver al ndice
Evitando el error 500
Pasando el juego de caracteres se evita el mostrar un error 500
AddDefaultCharset utf-8
Volver al ndice
Directiva CheckSpelling [Control de Ortografa]
Esta directiva puede ser til para auto-corregir errores de ortografa simple en la URL

CheckSpelling On

Volver al ndice
Agregar sumario MD5
Si no se est preocupado por problemas de performance, se peude agregar un clculo de llave MD5 para
agregar un MIC [Control de Integridad de Mensaje en ingls] en cada pedido. Esto es til para controlar la
integridad del mensaje.
ContentDigest On
Volver al ndice
Fuentes
http://corz.org/serv/tricks/htaccess.php
http://underscorebleach.net/jotsheet/2004/06/htaccess-prevent-hotlinking
http://brainstormsandraves.com/archives/2005/10/09/htaccess/
http://www.usphp.com/security.hiding.html
Volver al ndice
Herramientas
Generador de contraseas .htaccess
.htaccess
.htaccess es un archivo de texto oculto que contiene una serie de directivas para el servidor Apache. Cuando
un cliente solicita un archivo al servidor, este busca desde el directorio raz hasta el subdirectorio que
contiene el archivo solicitado el archivo .htaccess y tiene en cuenta estas reglas antes de proceder con la
peticin, es decir, se aplican las normas especificadas al directorio en el que se encuentre .htaccess y los
directorios por debajo de l.
Ejemplos de usos para .htaccess pueden ser restringir el acceso a determinados archivos, impedir el listado
de los archivos de un directorio, redireccionar, personalizar las pginas de error o impedir el acceso a
determinadas IPs o rangos de IP.
Impedir el listado del contenido de un directorio
Cuando se intenta acceder a un directorio, en ausencia de un archivo de ndice, Apache muestra por defecto
el contenido del directorio. Si queremos impedir al usuario ver el contenido de un directorio, bastara con
crear un archivo de ndice, por ejemplo index.html, pero existe una solucin ms elegante mediante la
directiva Options. Basta crear un archivo .htaccess que contenga la lnea:
Options -Indexes
Tambin podramos utilizar la directiva DirectoryIndex, que especifica qu archivos actan como ndice por
defecto, y que archivo mostrar en el caso de que estos no se encuentren. Por ejemplo la lnea:
DirectoryIndex index.php index.html index.htm /prohibido.php
indicara al servidor que debe buscar los archivos index.php, index.html o index.htm, en ese orden, y en el
caso de no encontrar ninguno de ellos, cargar el archivo prohibido.php.
Redireccionar el trfico web
Si nos encontramos con la necesidad de enviar al usuario a una determinada direccin web cuando pida una
cierta pgina, por ejemplo porque la hallamos movido, podemos utilizar la directiva Redirect de Apache.
Redirect /antiguo.php http://mundogeek.net/otros/nuevo.php
Crear un mensaje de error personalizado
Este es uno de los usos ms frecuentes para el archivo .htaccess. En ocasiones se pueden producir errores
que deben ser notificados al usuario, por ejemplo en el caso de que se intente acceder a una pgina que no
existe, bien por un fallo del usuario al introducir la url, o bien porque la pgina haya sido movida o
eliminada. Estos mensajes suelen estar escritos en ingls, no ofrecen demasiada informacin al usuario, y
rompen la esttica general del sitio, por lo que es imprescindible personalizarlos.
Para lograrlo utilizamos la directiva ErrorDocument, del que tenemos un ejemplo a continuacin:
ErrorDocument 403 "Acceso denegado
ErrorDocument 404 /404.php
ErrorDocument 500 /500.php
Los cdigos de error 403, 404 y 500 son los ms comunes, y se producen respectivamente cuando no se tiene
permiso para acceder a una pgina, cuando no se encuentra un archivo y debido a un error interno del
servidor.
La primera lnea indica al servidor que muestre el mensaje Acceso denegado siempre que se produzca el
error 403. Las otras lneas ilustran la forma de indicar al servidor que muestre una determinada pgina
cuando se produzca un error (se puede usar direcciones relativas o absolutas).
Evitar listado de directorios, archivo en Apache y IIS
Si bien muchas veces nuestros servidores instalados, por default vienen con la caracterstica de permitir el
listado de directorios, en ocasiones este puede convertirse en un problema de seguridad , por lo que seria
conveniente que restrinjamos esa opcin.
Apache
Para apache tenemos 3 mtodos distintos:


Mtodo 1
El primer mtodo precario y hasta un grado tedioso es colocar un archivo index.html | index.php |
index.htm a cada uno de los directorios donde no queremos que se listen los archivos.

en el ejemplo coloque un archivo index.html en el directorio images, para que no se listaran los archivos del
mismo.

Mtodo 2
El siguiente mtodo consiste en crear un archivo .htaccess para ello abrimos un smbolo de sistema, nos
movemos al directorio raz de nuestro sitio (en este caso prueba) y escribimos la siguiente lnea:
echo Options -Indexes > .htaccess

con esto evitaremos que cualquier directorio que se encuentra debajo del directorio principal liste los
archivos, apareciendo lo siguiente:

de esta forma hasta podemos seleccionar que tipo de archivos queremos que se listen y cuales no; para
mayor informacin:
http://www.enespanol.com.ar/2006/04/03/tutorial-de-htaccess/
http://mundogeek.net/archivos/2005/05/04/htaccess/
http://www.webmasterlibre.com/2006/09/04/los-htaccess/
Mtodo 3
Este mtodo es directamente en archivo de configuracin de apache (en mi caso estoy utilizando XAMPP,
por lo que mi archivo de configuracin es C:\xampp\apache\conf\httpd.conf ).
Abrimos el archivo de configuracin de apache con nuestro editor favorito (Notepad++) y buscamos la linea
Options Indexes FollowSymLinks

modificaremos la lnea agregando un - al inicio de Indexes, quedando de la siguiente forma: Options -
Indexes FollowSymLinks

Guardamos el archivo y reiniciamos nuestro servidor apache.
IIS (Versin 7)
En IIS la cosa es sencilla (Al estilo Microsoft) , primero probaremos si nuestro IIS tiene habilitada la
caracterstica de listado de directorio

En este caso podemos comprobar que si, por lo que iremos al panel de configuracin de Internet Information
Services (IIS) , para ello abrimos un explorador y colocamos la siguiente ruta: Panel de control\Sistema y
seguridad\Herramientas administrativas , una vez echo esto , damos doble clic sobre Administrador de
Internet Information Services (IIS) una vez en el Administrador nos ubicamos en el sitio en el que
queremos evitar el listado de directorios, en este ejemplo es el Default Web Site.


Damos sobre clic sobre el icono se abrir la siguiente ventana:

Aqu daremos clic sobre la opcin de deshabilitar :


Y listo :) , con eso tendremos nuestro listado de directorios deshabilitado

Si queremos manejar los errores de nuestro servidor para personalizar nuestras paginas, podemos visitar los
siguientes links:
http://www.psicobyte.com/html/taller/errores.html

Fuente:
Listado de archivos apache:
http://httpd.apache.org/docs/2.2/mod/core.html#options
http://www.respuestaexpress.com/566/seguridad-evitar-listado-directorios-varios-metodos/
http://sauaslp.wordpress.com/2011/01/04/ocultar-listado-de-archivos-en-iis/
Los cdigos de estado HTTP en IIS 7.0 y 7.5 de IIS
http://support.microsoft.com/kb/943891
http://support.microsoft.com/kb/324064#6
Configuracin bsica de Apache.
http://www.alcancelibre.org/staticpages/index.php/como-apache

Proteger directorios en el Servidor
http://www.forosdelweb.com/f58/proteger-directorios-servidor-151498/

También podría gustarte