Recopilación de artículos interesantes con ejemplos .htaccess sencillos y muy útiles, parámetros .htaccess y directivas .htaccess
Ejemplos
1. Redireccionamiento
Imagina que necesitas enviar a todos tus visitantes a una página en especial, mientras realizas el mantenimiento de tu sitio web:
order deny,allow deny from all allow from 123.123.123.123 ErrorDocument 403 /pagina.html <Files page.html> allow from all </Files>
Reemplaza el 123.123.123.123 con tu dirección IP y “pagina.html” con el nombre de la página que deseas que tus visitantes vean.
El siguiente código redirigirá de la URL de su dominio sin www a la URL de su dominio con www.
RewriteEngine On RewriteCond %{HTTP_HOST} ^midominio.com RewriteRule (.*) http://www.midominio.com/$1 [R=301,L]
Como cambiar de la URL www para la dirección URL sin www
Y el siguiente código debe redirigir al usuario de la dirección URL de su dominio con www a la dirección URL sin www.
RewriteEngine On RewriteCond %{HTTP_HOST} ^www.midominio.com [NC] RewriteRule ^(.*)$ http://midominio.com/$1 [L,R=301]
Para redireccionar varias URLS formadas por parámetros a un único sitio y eliminar query string (QSA)
Si por ejemplo queremos que estas URLS:
http://midominio.com/directorio/index.php?id=123
http://midominio.com/directorio/index.php?txt=alerta
http://midominio.com/directorio/index.php?variable=valor
Apunten a:
http://midominio.com/nueva-pagina (Sin QueryString)
RewriteRule ^directorio/(.*)$ /nueva-pagina? [L,R=301]
RewriteRule index\.php$ /nueva-pagina? [L,R=301]
Con el ^ indicamos que es justo después del dominio “http://midominio.com/” si no lo ponemos localizara en alún punto de la URL lo que le indiquemos como “index.php”
2. Bloqueo de IPs
Pero el redireccionamiento no lo es todo. Ahora imagina, ¿Qué sucedería si hay un crawlers o un boot spam que sobre carga tu servidor con peticiones inútiles o consultas fastidiosas? ¿Cómo los bloqueamos?
Order allow, deny Deny from 123.123.123.123 Allow from all
Donde 123.123.123.123 es la dirección ip a bloquear. Si se percatan, las directivas son muy similares a la anterior, con la diferencia, que en la primera denegamos el acceso a todos los visitantes, mientras que en la actual a uno.
3. Transfiriendo Page Rank
Esto se aplica a los casos en que hemos movido o renombrado una página web en nuestro sitio y queremos que todos nuestros visitantes sean enviados a la nueva url. La alternativa, que incluye la transferencia de PageRank, para el posicionamiento en buscadores, es:
Redirect 301 /pagina_antigua.html http:// tusitio.com/ pagina_nueva.html
Con el redireccionamiento 301, la página nueva no pierde el valor ganado por la página antigua.
4. Prevenir la navegación en un directorio
Esto es algo que a veces se nos olvida. Cuando un directorio no tiene la página de index, cualquier visitante puede observar los archivos contenidos en el directorio, y navegar a través de ellos. Si nosotros queremos prevenir esto, sólo debemos escribir lo siguiente:
Options All -Indexes
5. Página de Error 404 personalizada
Por defecto, el servidor Apache muestra una página de error 404 “404 File Not Found”, cuando nuestros visitantes acceden a una página que en el momento no existe.
Sin embargo, la página por defecto es poco usable y no deja una buena impresión. Por lo que, podríamos crear una página especial, a la cual redirigir cada vez que se produce el error 404.
ErrorDocument 404 /404.html
Donde 404.html es el nombre de la página personalizada, que queremos que nuestros visitantes vean.
6. Reescribir URLs amigables
Cuando tenemos dos urls amigables, por lo general se recomienda escoger la más corta y fácil de recordar. Por ejemplo:
RewriteEngine on RewriteRule ^contacto/$ /pages/contacto.html [L]
Aquí le decimos al servidor Apache, que active el modulo mod_rewrite (RewriteEngine on) y muestre el contenido de “/pages/contacto.html” cada vez que cualquier visitante ingrese a “http://tusitio.com/contacto”. Con la bandera L, detenemos el proceso si es que se cumple la condición, de esta manera ahorramos recursos. Más detalles: Urls amigables con PHP.
7. Directorios restringidos con contraseñas
En los casos en que necesitemos permitir el acceso a un directorio sólo a determinadas personas, podemos configurar nuestro servidor apache para cubrir esta necesidad. Básicamente, son 2 pasos los que hay que seguir:
Paso 1.- Crear el .htaccess, en el directorio a restringir
AuthUserFile /full/path/to/.htpasswd AuthName "Ingresar" AuthType Basic require user nombre_de_usuario
El archivo .htpasswd no debe estar en un directorio accesible a cualquier cliente web. No se olviden de probar esto.
Paso 2.- Crear el fichero .htpasswd
El ficher .htpasswd debe contener el nombre de usuario y la contraseña, que Apache solicitará. La contraseña debe estar cifrada.
nombre_de_usuario:password_encriptado
8. Orden de ejecución de archivos
Si tiene tanto el archivo index.html como el archivo index.php en la carpeta /public_html, el archivo index.html tiene mayor prioridad y se ejecutara en primer lugar. Aunque la mayoría de scripts web utilizan el archivo index.php como punto de partida. Si se puede eliminar el archivo index.html, se soluciona el problema, aunque no siempre es asi y en estos casos hay una mejor solución que es utilizar el siguiente código para dar prioridad al archivo index.php en vez de index.html.
DirectoryIndex index.php index.html
9. Comprimir archivos CSS, JavaScript, XML y texto
El siguiente código está diseñado para comprimir el código de salida CSS, JavaScript, XML y de texto antes de ser mostrado en el navegador. La idea básica es ahorrar tiempo en la carga y no consumir tanto ancho de banda.
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript
10. Almacenamiento en caché de imágenes
Cada vez que recibimos visitas en la web, el servidor web obtiene todos los archivos necesarios, tales como archivos CSS y JavaScript, así como fotos e imágenes para poder mostrarla. Podemos usar el código de abajo para gestionar los archivos de caché, y que cuando un visitante vuelva a visitarnos por segunda vez, el servidor cargue el archivo de la caché lo que acelerará el tiempo de carga sitio web.
ExpiresActive On ExpiresByType image/gif A432000 ExpiresByType image/jpg A432000 ExpiresByType image/jpeg A432000 ExpiresByType image/png A432000 ExpiresByType image/ico A432000 ExpiresByType image/bmp A432000 ExpiresByType text/css A432000 ExpiresByType text/javascript A432000 ExpiresByType application/javascript A432000 ExpiresByType application/x-javascript A432000
El código anterior guarda caché de los archivos durante cinco días o 432.000 segundos. Puede cambiar el período de almacenamiento en caché, asegurándose de utilizar el valor expresado en segundos.
11. Proteger el archivo .htaccess
El siguiente código evita que su archivo .htaccess puedan ser leído directamente desde el navegador web.
order allow,deny deny from all
12. Prevenir el hotlinking
A veces, otros webmasters, hacen suyas las imágenes de nuestras webs, artículos, etc., afectando con ello el ancho de banda de que disponemos en nuestro Hosting. Si ademas ellos tienen una gran cantidad de visitantes al día, estos van a utilizar nuestro ancho de banda del servidor para visualizar nuestras imagenes en la web ajena a nosotros. Se puede utilizar el código que se muestra a continuación para evitar el hotlinking, y de esta forma reemplazar la imagen original por otra con algún aviso para hacerles saber que la imagen es nuestra o que el hotlinking es una mala práctica.
RewriteEngine On RewriteCond %{HTTP_REFERER} !^http://(.+\.)?midominio\.com/ [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteRule .*\.(jpg|gif|bmp|png)$ http://hotlink.midominio.com/no_se_permite_hotlinking.jpg [L]
Puede subir las imágenes a un sitio de alojamiento de imágenes como ImageShack para evitar que su ancho de banda se vea afectado.
13. Cambiar la ubicación de la carpeta de dominio a otra carpeta de /public_html
Si ya tiene un sitio web en el /public_html, y quiere actualizar la página web, pero no quiere que los demás lo vean, pero tampoco quiere afectar al sitio web en producción existente, la forma más fácil es la construcción de la nueva página web en una subcarpeta de /public_html, por ejemplo, /public_html/web2.
Al finalizar todas las pruebas y mejoras, quiere reemplazar el antiguo sitio web con el nuevo pero transferir archivos y carpetas a la carpeta /public_html es bastante molesto. La mejor solución es usar .htaccess para decirle a Apache que utilice la carpeta /public_html/web2 en lugar de /public_html para el dominio.
RewriteEngine On RewriteCond %{HTTP_HOST} ^midominio\.com$ [OR] RewriteCond %{HTTP_HOST} ^www\.midominio\.com$ RewriteCond %{REQUEST_URI} !^/web2/ RewriteRule (.*) /web2/$1 [L]
14. Crear URLs de uso fácil o “amigables”
¿Cuál de las dos URL a continuación parece más amigable?
http://tusitio.com/acercade
http://tusitio.com/paginas/acercade.html
Cuando se trata de direcciones URL, siempre y cuando el significado sea claro, cuanto más corto es, mejor. htaccess con una llamada al módulo de Apache mod_rewrite permite configurar las direcciones URL como quieras. El servidor puede mostrar el contenido de “/paginas/acercade.html” cada vez que alguien visita “http://tusitio.com/acercade”.
A continuación algunos ejemplos:
RewriteEngine on RewriteRule ^acercade/$ /paginas/acercade.html [L] RewriteRule ^caracteristicas/$ /caracteristicas.php [L] RewriteRule ^comprar/$ /comprar.html [L] RewriteRule ^contacto/$ /paginas/contacto.htm [L]
En este otro ejemplo eliminamos “category” de la URL de las categorías de wordpress
RewriteRule ^category/(.+)$ http://mipagina.com/$1 [R=301,L]
15. Forzar el uso de SSL
Este código fuerza a utilizar SSL, no permitiendo conexiones http. Para evitar escuchas en http:// utilizamos por debajo la directiva ErrorDocument.
SSLOptions + StrictRequireSSLRequireSSL
Forzamos la conexión SSL de todo el sitio mediante redirección ModRewrite:
RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://mipagina.com/$1 [R,L]
Para aplicarlo solo a un directorio añadiremos la condición de dicho directorio:
RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteCond %{REQUEST_URI} directorio 1 [OR] RewriteCond %{REQUEST_URI} directorio 2 RewriteRule ^(.*)$ https://mipagina.com/$1 [R=301,L]
16. Cuando una línea comienza por # es un comentario que no tiene ningún efecto.
Cuando alguien visita su sitio el servidor web Apache verifica si tiene un archivo .htaccess en algún lugar de su espacio web a partir de la carpeta raíz o la carpeta principal y rastrea todas las carpetas hasta llegar al archivo solicitado. Si encuentra un archivo .htaccess, sus directivas se aplican a la solicitud actual.
Es importante saber que el archivo .htaccess debe ser legible por el servidor Apache. Por tanto es importante consultar con su Hosting si se requiere algún permiso especial que hayan establecido para los archivos .htaccess. En general los permisos correctos para este archivo son 644.
PARÁMETROS
.htaccess (Acceso de Hiper-Texto) es un archivo de texto que Apache usa para crear reglas sobre los directorios y los archivos. Tiene múltiples funciones y en lo personal me parece una herramienta sumamente interesante.
A manera de glosario anexo simbologías utilizadas en el archivo .htaccess con la intención de que podamos comprender mejor el código y a la vez personalizarlo según necesidades específicas.
#
Se ignora la línea.
[F]
Forbidden: para forzar un acceso denegado. 403 Forbidden.
[L]
Last rule: para indicar que es la última regla que debe aplicarse
[N]
Next: indica continuación hasta que las directivas sean logradas
[G]
Gone: indica al servidor entregar “Gone” (ya no existe)
[P]
Proxy: instruye al servidor para manejar los pedidos por mod_proxy
[C]
Chain: Instruye al servidor para encadenar la regla actual con la regla previa.
[R]
Redirect: indica redirección.
[NC]
No Case: para indicar que en la directiva no debe distinguirse entre mayúsculas y minúsculas.
[PT]
Pass Through: pasa el URL al Apache para seguir procesando.
[OR]
Or: para indicar que la expresión actual debe interpretase como una alternativa a la anterior.
[NE]
No Escape: instruye al servidor para analizar las salidas sin escapar carácteres.
[NS]
No Subrequest: para saltar directivas de sub-pedidos internos.
[QSA]
Append Query String: para agregar un query string al final de la expresión (URL).
[S=x]
Skip: para saltar las siguientes “x” reglas.
[E=variable:value]
Environmental Variable: para agregar una variable a un valor.
[T=MIME-type]
Mime Type: declara mime-type al recurso.
[]
dentro de los paréntesis se encierran carácteres que definen los resultados.
[]+
se utiliza para hacer combinaciones.
[^]
excluye los carácteres dentro del paréntesis, de los resultados. Ejemplo [^xyz].
[a-z]
solamente letras.
[a-z]{1,10}
palabras entre 1 y 10 caracteres.
[0-9]
solamente números.
[0-9]{4}
números de 4 cifras.
(.*)
cualquier expresión.
a{n}
especifica el número exacto del caracter que le precede.
a{n,}
especifica el número “o más” del caracter que le precede.
a{n,m}
especifica un rango entre “n” y “m”. Ejemplo x{4,7} resulta 4,5,6 o 7 x´s.
()
agrupa carácteres
^
denota “el principio” del argumento.
$
denota “el fin” del argumento.
?
Declara como opcional el caracter anterior.
!
declara negación (excepto). Ejemplo: “!string” resulta “excepto string”.
.
el punto indica “cualquier caracter arbitrario”.
–
intrucción “not to”.
+
declara “uno o más” del caracter que le precede.
|
declara “or”. Ejemplo (x|y) resulta “x” o “y”.
\
para leer caracteres especiales. Ejemplo “\.” indica literalmente un punto.
/*
indica cero o más “/”.
.*
indica cero o más caracteres arbitrarios.
^$
indica un “empty string”.
^.*$
pauta estándar para obtener todo.
[^/.]
define, un caracter que no es “/” ni “.”.
[^/.]+
define, ningún número de caracter que tenga “/” o “.”.
http://
es literalmente “http://”.
^domain.*
define un string que comienza con el término “domain” y continúa con cualquier número de caracteres.
^domain\.com$
define exactamente “domain.com”.
-d
prueba si el string es un directorio existente.
-f
prueba si el string es un archivo existente.
-s
prueba si el archivo en el string no tiene valor cero.
DIRECTIVAS
De forma general se puede decir que las directivas en el .htaccess se componen de tres partes: el tipo de directiva (Options, RewriteCond), los parámetros de la directiva y por último el final de cada línea en que se pueden agregar modificaciones adicionales.
Las expresiones regulares son patrones de cadenas de textos que se definen utilizando símbolos como el de oclusión (^) para indicar el inicio, el del dólar ($) para señalar el final, el cierre de interrogación (?) para un carácter opcional, el asterisco (*) para varios caracteres opcionales.
Los valores que aparecen entre corchetes al final de cada línea son modificadores o acciones. Por ejemplo, para RewriteCond se puede utilizar [NC] para indicar que en la directiva no debe distinguirse entre mayúsculas y minúsculas (no case), u [OR] para indicar que la expresión actual debe interpretase como una alternativa a la anterior: Por su parte, RewriteRule admite otros modificadores propios, como [F] para forzar un acceso denegado (forbidden), o [L] para indicar que es la última regla que debe aplicarse (last rule). Ejemplo:
Cambiando 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.php
Redireccionar el tráfico web:
Redirect /antiguo.php http://sitio.com/nuevo.php
Limitar los tipos de ficheros que pueden subirse a un directorio
php_value engine off AddType text/plain .htm .html .shtml
Contenido dependiente del Navegador
Para redirigir el contenido en función del navegador se puede utilizar el valor de “User-Agent” que aparece en la cabecera HTTP de las peticiones, y con el que normalmente se identifica el navegador. Por ejemplo, las siguientes líneas colocadas en un fichero .htaccess harían que cuando un agente solicitará la página index.html se le sirviese la página index.opera.html si se identifica como “Opera/*”, la página index.mozilla.html si se identifica como “Mozilla/*” y la página index.html en cualquier otro caso.:
RewriteCond %{HTTP_USER_AGENT} ^Opera/* RewriteRule ^index\.html$ index.opera.html [L] RewriteCond %{HTTP_USER_AGENT} ^Mozilla/* RewriteRule ^index\.html$ index.mozilla.html [L] RewriteRule ^index\.html$ index.html [L]
Los asteriscos en las expresiones regulares de las directivas casan con cualquier cadena de texto. Y en este caso en concreto se utilizan para redirigir el contenido dependiendo del nombre del agente sin tener en cuenta la versión, que suele indicarse a continuación de la barra, como “Mozilla/3.0”, “Mozilla/4.0”, “Mozilla/5.0”, …
Especificar el e-mail por defecto del administrador del server:
# e-mail del administrador del server SetEnv SERVER_ADMIN nombre@sitio.com
Especificar el lenguaje por defecto del server:
# lenguaje por defecto del server DefaultLanguage en-US
Declarar específicos MIME types:
# agregar mime types AddType application/x-shockwave-flash .swf AddType video/x-flv .flv AddType image/x-icon .ico
Prevenir accesos al archivo .htaccess:
# asegurar htaccess <Files .htaccess> order allow,deny deny from all </Files>
Prevenir acceso a un archivo específico:
<files nombre.jpg> order allow,deny deny from all </files>
Prevenir acceso a múltiples archivos (puedes variar las extensiones):
<FilesMatch "\.(htaccess|htpasswd|ini|phps|fla|psd|log|sh)$"> Order Allow,Deny Deny from all </FilesMatch>
Evitar acceso por el navegador a una carpeta sin “index”:
Options All -Indexes
Permitir acceso por el navegador:
Options All +Indexes
Evitar el listado de directorios:
IndexIgnore *
Evitar que se muestren tipos de archivo:
IndexIgnore *.wmv *.mp4 *.avi *.etc
Disfrazar la extensión de los archivos:
# los archivos foo se reconocerán como php AddType application/x-httpd-php .foo
Proteger directorio de un IP y/o dominio:
<Limit GET POST PUT> order allow,deny allow from all deny from 12.345.67.890 deny from .*domain\.com.* </Limit>
Denegar todo acceso a un directorio excepto el IP especificado:
<Limit GET POST PUT> order deny,allow deny from all allow from 12.345.67.890 allow from .*domain\.com.* </Limit>
Bloquear visitantes que provienen del dominio especificado:
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_REFERER} scumbag\.com [NC,OR] RewriteCond %{HTTP_REFERER} wormhole\.com [NC,OR] RewriteRule .* - [F] </ifModule>
Denegar acceso de rango de IP (CIDR):
Deny from 10.1.0.0/16 Deny from 80.0.0/8
Permitir acceso de rango de IP (CIDR):
Allow from 10.1.0.0/16 Allow from 80.0.0/8
Denegar rango de IP:
Recuerda que se lee de izquierda, “Cualquier IP que comience con”:
Deny from 99.88.77.66 Deny from 99.88.77 Deny from 99.88 Deny from 99
Permitir rango de IP
Allow from 99.88.77.66 Allow from 99.88.77 Allow from 99.88 Allow from 99
Evitar Hotlink:
<IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{HTTP_REFERER} !^$ RewriteCond %{HTTP_REFERER} !^http://(www\.)?domain\.com/.*$ [NC] RewriteRule .*\.(gif|jpg)$ http://www.domain.com/eatme.jpe [R,NC,L] </ifModule>
Puedes agregar otros sitios debajo de la lìnea en que aparece el dominio:
RewriteCond %{HTTP_REFERER} !^http://(www\.)?sitio\.com/.*$ [NC]
Bloquear robots maliciosos:
RewriteEngine On RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [OR] RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [OR] RewriteCond %{HTTP_USER_AGENT} ^Zeus RewriteRule .* - [F]
Se puede personalizar el error generado a estos robots modificando la última línea (RewriteRule) de esta forma:
RewriteRule ^.*$ http://www.pagina_de_error.com [R,L]
Te recomiendo que uses la siguiente línea en tu .htaccess. Referente al bloqueo de Robots y Referers maliciosos:
RewriteEngine on RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?gameday.de.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?play-texas-holdem.gameday.de.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?forever.kz.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?craps.forever.kz.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?roulette-online.forever.kz.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?play-poker.forever.kz.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?onlinecasino.forever.kz.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?texashold-em.freeservers.com.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?playonline.inn7winter.com.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?poker-new.com.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?available-poker.com.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?free-poker.available-poker.com.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?texasholdem.prv.pl.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?prv.pl.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?homestead.com.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?texaspoker.homestead.com.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?t-e-x-a-s-poker.com.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?texas-poker.olo.cc.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?holdem-poker.servertown.com.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?online-poker.played.by.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?empire-poker.black-poker.com.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?black-poker.com.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?free.fr.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?pc800cdf.free.fr.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?free-poker.standard-poker.com.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?cameralover.net.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?golfshoot.com.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?bitlocker.net.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?bayfronthomes.net.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?cafexml.com.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?turniptruck.com.*$ [NC] RewriteCond %{HTTP_REFERER} ^http(s)?://(www\.)?trojan-horse.co.uk.*$ [NC] RewriteRule .* - [F,L] RewriteCond %{REMOTE_HOST} adm-muenchen\.de [NC,OR] RewriteCond %{REMOTE_HOST} cyveillance\.com [NC,OR] RewriteCond %{REMOTE_HOST} lightspeedsystems\.com [NC,OR] RewriteCond %{REMOTE_HOST} pea016-29980-net-adsl-01\.altohiway\.com [NC,OR] RewriteCond %{REMOTE_HOST} smartservercontrol\.com [NC,OR] RewriteCond %{REMOTE_HOST} syntryx\.com [NC,OR] RewriteCond %{REMOTE_HOST} proxad\.net [NC] RewriteRule ^.*$ - [F] RewriteCond %{HTTP_USER_AGENT} ^$ [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^BlackWidow [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Bot\ mailto:craftbot@yahoo.com [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^ChinaClaw [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Custo [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^DISCo [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Download\ Demon [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^eCatch [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^EirGrabber [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^EmailSiphon [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^EmailWolf [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Express\ WebPictures [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^ExtractorPro [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^EyeNetIE [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^FlashGet [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^GetRight [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^GetWeb! [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Go!Zilla [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Go-Ahead-Got-It [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^GrabNet [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Grafula [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^HMView [NC,OR] RewriteCond %{HTTP_USER_AGENT} HTTrack [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Image\ Stripper [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Image\ Sucker [NC,OR] RewriteCond %{HTTP_USER_AGENT} Indy\ Library [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^InterGET [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Internet\ Ninja [NC,OR] RewriteCond %{HTTP_USER_AGENT} Java [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^JetCar [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^JOC\ Web\ Spider [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^larbin [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^LeechFTP [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^lwp:: [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^lwp- [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Mass\ Downloader [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^MIDown\ tool [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Mister\ PiX [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Navroad [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^NearSite [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^NetAnts [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^NetSpider [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Net\ Vampire [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^NetZIP [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Octopus [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Offline\ Explorer [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Offline\ Navigator [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^PageGrabber [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Papa\ Foto [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^pavuk [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^pcBrowser [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^RealDownload [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^ReGet [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^SiteSnagger [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^SmartDownload [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Schmozilla [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^SuperBot [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^SuperHTTP [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Surfbot [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^tAkeOut [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Teleport\ Pro [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^VoidEYE [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Web\ Image\ Collector [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Web\ Sucker [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^WebAuto [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^WebCopier [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^webcollage [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^WebFetch [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^WebGo\ IS [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^WebLeacher [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^WebReaper [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^WebSauger [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Website\ eXtractor [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Website\ Quester [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^WebStripper [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^WebWhacker [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^WebZIP [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Wget [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Widow [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^WWWOFFLE [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Xaldon\ WebSpider [NC,OR] RewriteCond %{HTTP_USER_AGENT} ^Zeuse [NC] RewriteRule ^.*$ - [F]
Bloquear “referrers” específicos. En este ejemplo se bloquea a1b2.com:
RewriteCond %{HTTP_REFERER} ^http://www.a1b2.com$ RewriteRule !^http://[^/.]\.tusitio\.com.* - [F,L]
Redirecciona lo que venga de “a1b2” a una imagen:
RewriteCond %{HTTP_REFERER} ^http://.*a1b2.*$ [NC] RewriteRule .* http://www.tusitio/imagen.jpg [R]
Redirecciona el tráfico que viene de cierta dirección o rango de dirección a otra página:
RewriteCond %{REMOTE_ADDR} 192.168.10.* RewriteRule .* http://www.tusitio.com/otrapagina.html [R]
Asignar permisos CHMOD automáticamente a tipos de archivos:
chmod .htpasswd files 640 chmod .htaccess files 644 chmod php files 600
Protección contra ataques DOS, limitando el tamaño de archivos que suben al server.
(10000000 bytes equivale a 10 megabytes). Esta línea es útil si permites que los usuarios de tu sitio suban archivos.
LimitRequestBody 10000000
Proteger directorios evitando la ejecución de scripts (edita las extensiones según lo requerido):
AddHandler cgi-script .php .pl .py .jsp .asp .htm .shtml .sh .cgi Options -ExecCGI
Páginas de error personalizadas:
ErrorDocument 400 /errors/400.html ErrorDocument 401 /errors/401.html ErrorDocument 403 /errors/403.html ErrorDocument 404 /errors/404.html ErrorDocument 500 /errors/500.html
Autocorrección de pequeños errores de escritura:
<IfModule mod_speling.c> CheckSpelling On </IfModule>
Permitir al usuario descargar o abrir archivos multimedia (por lo general sólo se abren):
AddType application/octet-stream .avi AddType application/octet-stream .mpg AddType application/octet-stream .wmv AddType application/octet-stream .mp3
Redireccionar visitantes a una dirección alternativa, menos a ti (modifica el IP):
ErrorDocument 403 http://www.sitio-alternativo.com Order deny,allow Deny from all Allow from 200.105.77.66
Prevenir el acceso a un directorio a una hora u horas específicas:
# una hora RewriteCond %{TIME_HOUR} ^12$ RewriteRule ^.*$ - [F,L] # varias horas RewriteCond %{TIME_HOUR} ^(12|13|14|15)$ RewriteRule ^.*$ - [F,L]
Redireccionar permanentemente www.sitio.com a sitio.com:
RewriteEngine on Options +FollowSymLinks RewriteCond %{HTTP_HOST} ^www\.sitio\.com$ [NC] RewriteRule ^(.*)$ http://sitio.com/$1 [R=301,L]
Redireccionar todo el contenido de un directorio a la raiz del propio directorio sin entrar en bucle permanente:
RewriteEngine on RewriteCond %{REQUEST_URI} ^/categoria/(.+)$ RewriteRule ^(.*) /categoria [R=301,NC]
Redireccionar vieja página a la nueva:
RewriteEngine On RewriteRule ^(.*)$ http://www.nueva.com/$1 [R=301,L]
Redirecionar el sitio vía 301:
redirect 301 / http://www.domain.com/
Redireccionar archivo específico vía 301:
redirect 301 /archivo.html http://www.domain.com/nuevo-archivo.html
Redireccionar sitio vía “permanent”:
Redirect permanent / http://www.domain.com/
Redireccionar página o directorio vía “permanent”:
Redirect permanent viejo-archivo.html http://www.domain.com/nuevo-archivo.html Redirect permanent /viejo-directorio/ http://www.domain.com/nuevo-directorio/
Redireccionar archivo usando “RedirectMatch”:
RedirectMatch 301 ^.*$ http://www.domain.com/index.html
Activar compresión
Se puede habilitar la compresión de datos inherente de PHP para ahorrar ancho de banda
<ifmodule mod_php4.c> php_value zlib.output_compression 16386 </ifmodule>
No mostrar ‘www’
RewriteEngine on Options +FollowSymLinks RewriteCond %{HTTP_HOST} ^www\.sitio\.com$ [NC] RewriteRule ^(.*)$ http://sitio.com/$1 [R=301,L]
Evitando el error 500
Pasando el juego de caracteres se evita el mostrar un error 500
AddDefaultCharset utf-8