Para aquellos que pelean contra WP y el formato de links. Y también para quien lo necesite una pequeña recopilación de consejos para poder crear y modificar el archivo misterioso que todo lo puede :p.
Notas de traducción
- Esta traducción fue realizada bajo permiso expreso y por escrito - en e-mail - del autor: Paolo Tagliaferri (que le manda saludos a Pampita)
- Tanto el artículo original como su traducción se encuentra bajo licencia Creative Commons Atribución-NoComercial-SinDerivadas
- Los vínculos fueron mantenidos así que éstos seguramente se encontrará en inglés
- Artículo Original: Apache .htaccess tweaking tutorial
Si a alguien se le ocurre algo para agregar/modificar/corregir al tutorial sólo deje un comentario y vemos cómo hacemos.
La traducción
En este tutorial mejoraremos nuestro sitio web modificando el archivo .htaccess.¿Por qué escribí este artículo? Porque en la red encontré un montón de artículos sobre esta pequeña 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 monolítico, que será actualizado a medida que consiga más información. Primero sin embargo, veamos qué es un archivo .htaccess.
Esto es lo que dice la definición de la wikipedia [en inglés]:
.htaccess (Acceso de Hiper-Texto) es el nombre por defecto del archivo de configuración de directorios de Apache. Provee de la habilidad para personalizar la configuración de las directivas definidas en el archivo de configuración principal. Las directivas de configuración necesitan estar en el contexto de .htaccess y el usuario necesita los permisos apropiados.
Ahora veamos los problemas más comunes.
Índice (Última actualización: 28 de Febrero de 2006)
- Control de acceso a carpetas
- Listado de carpetas
- Activación de compresión
- Escondiendo archivos
- Páginas de error HTTP 404 personalizadas
- Bloqueo de referers maliciosos - Nada de hotlinking
- Bloqueo de robots maliciosos
- No mostrar ‘wwww’
- Escondiendo la extensión del lenguaje de scripting
- Consejos y trucos varios
- Protección con contraseña mediante htpasswd
- Activando SSI
- Cambiando la página por defecto
- Evitando el error 500
- Directiva CheckSpelling [Control de Ortografía]
- Agregar sumario MD5
- Fuentes
- Herramientas
Control de acceso a carpetas
Podrías querer deshabilitar totalmente el acceso a una carpeta (por ejemplo, una carpeta con librerías de programación que se incluyen en los archivos principales. En este caso sólo los archivos principales accederána ellos mediante el sistema de archivos, pero no se podrán acceder via web). Bueno, simplemente crea un archivo .htaccess en esa carpeta que contenga:
#deny all access
deny from allSi se quiere permitir el acceso desde una IP específica
#deny all access
deny from all
allow from 10.0.0.1o para un rango específico de IPs (forzado mediante la máscara de red)
allow from 192.168.0.0/24también se puede bloquear el acceso a un archivo específico
<Files privado.html>
Order allow,deny
Deny from all
Listado de carpetas
Si se quiere hacer las carpetas navegables, entonces necesitamos agregar esta línea al archivo .htaccess
Options +Indexes +MultiViews +FollowSymlinksY esta si se tiene el módulo apropiado en el servidor web
IndexOptions FancyIndexing
También se podría querer prevenir el listado de carpetas
IndexIgnore *Activar compresión
Se puede habilitar la compresión de datos inherente de PHP para ahorrar ancho de banda
php_value zlib.output_compression 16386
Escondiendo archivos
Para deshabilitar el acceso a un archivo en particula se puede utilizar una expresión 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 configuración, robots.txt, archivos de logs o lo que se desee).
Order allow,deny
Deny from all
Satisfy All
Páginas de error HTTP 404 personalizadas
Si se quisiera redireccionar los visitantes cada vez que se encuentran con una página de error HTTP 404, utiliza éste código:
ErrorDocument 404 /errores/noencontrado.htmlEsto 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 utilización de cualquier página de error 404 personalizada que sea menor a 512 bytes de largo. Los visitantes serán enviados, en cambio, a la página propia de IE, que es genérica y sugiere que utilizen una búsqueda en MSN para buscar la información en internet. ¡Esa es una forma de perder visitantes! Asegúrate que tu página personalizada esté por sobre este límite - algo así como 10 líneas completas de texto y HTML deberían ser suficientes.
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 extensión 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 página, o lo que desees, o p uedes modificar la lista de extensíones de archivo para incluir/quitar otros archivos. Cuidado: cuando se decide bloquera el hotlinking de imágenes recuerda que puedes estar bloqueando todo tráfico fuera del alcance de tu dominio. Por ejemplo, si se posee un archivo de sindicación tomado por bloglines necesitarás modificar la regla para permitirles a los lectores obtener las imágenes - o el RSS se verá mal.
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 podría 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í)
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é querría quitar ‘www’? En ese link los fundamentos
Escondiendo la extensión del lenguaje de scripting
Se puede aumentar la seguridad cambiando la extensión de los scripts para que los visitantes desconozcan qué lenguaje estás utilizando:
# Make PHP code look like unknown types
AddType application/x-httpd-php .coolDe esta forma, los archivos .cool serán tratados como si fuesen archivos PHP. Se deben renombrar los archivos que se quiera con esta nueva extensión.
Consejos y trucos varios
- Mantiene el archivo .htaccess pequeño: este archivo es procesado por el servidor web en cada pedido (pudiendo causar problemas de performance).
- Mantiene tu archivo .htaccess organizado. Utiliza comentarios (líneas que comienzan en #) y se lógicamente consistente. Es complicado entender un archivo .htaccess desorganizado una vez que crece lo suficiente.
- Cuando se utilicen reglas de reescritura de URLs, agrega la opción [L] a aquellas páginas finales (como la de hotlinking y demás). Esto le dirá al servidor que no procese más reglas (aumentando la performance).
- Cuidado con la herencia: el archivo .htaccess a nivel raíz es aplicado también en las carpetas, cuaquier regla .htaccess en la carpeta puede reemplazar las reglas de la carpeta raíz.
Protección con contraseña mediante .htpasswd
Esto es útil cuando se quiere agregar una contraseña a ciertas páginas y/o archivos
- Crea un archivo .htpasswd en la carpeta a protejer.
- El archivo contendrá la información de registro de la forma usuario:contraseña. El nombre de usuario es en texto plano. La contraseña debe de estar encriptada o no funcionará. Utiliza esta herramienta para saber qué texto agregar.
- Si se crea el archivo en la PC local, acuérdate de subirlo al servidor en modo ASCII.
- Normalmente, se puede modificar el archivo .htaccess. La autenticación 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 sólo archivo incluyendo este código dentro de una directiva
- Asegúrate de protejer el acceso al archivo .htaccess utilizando el primer consejo.
Activando SSI
Utiliza éstas instrucciones para activar la interpretación SSI
AddType text/html .html
AddType text/html .shtml
AddHandler server-parsed .html
AddHandler server-parsed .shtmlCambiando la página por defecto
Se puede utilizar esta instrucción para cambiar la página por defecto (el orden es importante)
DirectoryIndex inicio.html index.htm index.html index.phpEvitando el error 500
Pasando el juego de caracteres se evita el mostrar un error 500
AddDefaultCharset utf-8Directiva CheckSpelling [Control de Ortografía]
Esta directiva puede ser útil para auto-corregir errores de ortografía simple en la URL
CheckSpelling On
Agregar sumario MD5
Si no se está preocupado por problemas de performance, se peude agregar un cálculo de llave MD5 para agregar un MIC [Control de Integridad de Mensaje en inglés] en cada pedido. Esto es útil para controlar la integridad del mensaje.
ContentDigest OnFuentes
Herramientas
- Generador de contraseñas .htaccess
19 Comments
Muy útil, el .htaccess es genial.
Ahora, vos sabes que todavía no he logrado comprender como funciona el mod_rewrite del apache
y lo peor es que tampoco encontré muy buena documentación al respecto.
Excelente artículo. Soy otro que esta a favor de abolir el “www”. Respecto al mod_rewrite es una de las pocas tareas que hago con el htaccess. Incluso he llegado a trabajar redireccion de subdominios y es algo fascinante como un archivito de texto puede ser tan potente.
Marcos: por lo que tengo entendido es simplemente un módulo que permite reescribir el pedido HTTP on the fly de forma totalmente transparente al usuario. Si vos no encontraste info, no creo que yo pueda hacerlo; pero podría probar.
Lucas: muy cierto. Aunque en realidad, lo potente es el sistema en el que corre. Éste es el que hace todo el trabajo y te permite hacer todo de una forma muy sencilla por medio de estos archivos tan simples.
Good job man
Primero de todo quiero felicitarte por la “profesionalidad” del redactado de este tutorial.Gracias a gente como tu ,la gente como yo escalar un peldaño más en esta aventura de pasar de mocosoft al sistema del pingüino….
Gracias man!!
Muchas gracias por las felicitaciones :$
Escelente articulo!! me es de mucha utilidad, gracias
hola, despues de bloquear una carpeta con .htaccess, como seria el codigo php para acceder a los datos dentro de ella?
Guishe: Como bien dice el tutorial, si lo que quieres es control de acceso te conviene usar el .htpasswd
muy bueno el tutorial ahora si me queda claro lo del .htpasswd
http://www.chistemaniaco.com
Hola,
gran tutorial, me ha servido para proteger una carpeta de administración en un sitio web que estaba haciendo. Pero he encontrado un problema…con firefox 1.5 la autenticación funciona, pero con IE no funciona, me pide usuario y contraseña, la pongo y la vuelve a pedir, así hasta que me dice que estoy intentando entrar en zona restringida.
Versión Apache 2.2.3 PHP 5.1.6, versión IE 6.0.2900
alguien sabe a qué se debe?
gracias, un saludo.
oyE. este articulo es genial y realmente util.
gracias
Justo lo que buscaba….gracias.
Simplemente, Muchas gracias!
En cómo quitar www pone que se hace así
Options +FollowSymlinks
RewriteEngine on
RewriteCond %{http_host} ^www\.example\.com[nc]
RewriteRule ^(.*)$ http://example.com/$1 [r=301,nc]
pero lo correcto es
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.domain\.com$ [NC]
RewriteRule ^(.*)$ http://domain.com/$1 [R=301,L]
como dice en http://no-www.org/
Me parece excelente el contenido, muchas gracias!!!
excelente articulo. el mejor que halle en la red
gracias Paolo y al flaquito que se tomo el trabajo de traducirlo
Para hacer que archivos con extension .asp corran .php
AddType application/x-httpd-php .asp
Me fue util para cuando cambie mi hosting ASP a uno con PHP
17 Trackbacks
Tutorial de htaccess en español…
Tutorial con las cosas más típicas que debemos hacer con nuestro archivo .htaccess. Muy útil….
[…] Eso se hace mediante un archivo .htaccess, con la directiva errorDocument. Te dejo un par de links al respecto: Apache Tutorial: .htaccess files (explicación oficial de Apache) Tutorial de .htaccess at En Español (tutorial 1, en español) Comprehensive guide to .htaccess- intro (tutorial 2, en inglés) […]
[…] Para evitar esto, por parte del que mantenga un sitio web, se pueden agregar marcas de agua a las imágenes (no evita el hotlinkig pero se da a conocer de donde se saco la imagen) y/o utilizar la directiva “RewriteCond” junto con el http_referer del archivo .htaccess (para servidores HTTP Apache) para evitar o redirigir el acceso a la imagen. […]
[…] propio ancho de banda. No es cosa dificil pero le tocará estudiar algo la edición de un archivo htaccess en la carpeta raíz y ya de paso toquitear las opciones de protección de carpetas que ofrece […]
[…] buena fuente de informacion acerca del archivito .htaccess es este tutorial que encontre navegando hace unos dias cuando edite por primera vez el archivo para mi diccionario […]
[…] en la red me he encontrado con un buen tutorial de .htaccess en castellano traducido por En Español. Imprescindible para proteger y asegurar tu sitio web y, especialmente, […]
[…] Enlace [Tutorial de .htaccess] […]
[…] de .htaccess en castellano. vía: la brujula […]
[…] Control de acceso a carpetas […]
[…] artículo más leído: tutorial de .htaccess con poco más del 15% de las […]
[…] Tutorial de .htaccess. […]
[…] En Español » Tutorial de .htaccess Lindo tutorial de archivo .htaccess (tags: htaccess webdev howto programming) Archivado en: Links Diarios | Etiquetas: No Tags. Search […]
[…] Tutorial de htaccess ofrece algunos consejillos y unas cuantas reglas para tareas como las que he comentado anteriormente. Por su parte, Stupid htaccess tricks [en] es otro tanto de lo mismo pero profundiza más en el asunto y ofrece bastante más repertorio de configuraciones. […]
[…] Tutorial de .htaccess Publicado el Saturday, 10 de May del 2008 (13:38:49) […]
[…] Control de acceso a carpetas […]
[…] tutorial de .htsccess […]
[…] Tutorial de .htaccess […]