El archivo .htaccess

¿Qué es el archivo .htaccess?

El archivo .htaccess (hypertext access) es un archivo de configuración muy popular en servidores web basados en Apache que permite a los administradores aplicar distintas políticas de acceso a directorios o archivos con la idea de mejorar la seguridad de su página web y, por tanto, evitar acceso a terceros. Cuando visitamos una página web cualquiera y pulsamos sobre un enlace o queremos descargarnos un archivo, en el proceso de trámite de la petición, el servidor web consulta el archivo .htaccess con la idea de aplicar las directivas y restricciones definidas antes de cursar la petición y, lógicamente, cancelar peticiones que se encuentren prohibidas dentro de este archivo (cuyo ámbito de actuación es el directorio en el que se encuentra y todos los subdirectorios que se encuentran por debajo de éste).

¿Y qué podremos controlar con este archivo?

Gracias a este archivo podremos configurar nuestro servidor web para hacerlo algo más seguro pero, además, también podremos realizar redirecciones, crear mensajes de error personalizados, restringir el acceso a carpetas, evitar el listado de directorios de nuestro servidor o permitir el uso de nuestro dominio sin usar las famosas ‘www’.

Proteger archivos y carpetas importantes

Si bien es importante evitar el acceso a los directorios, también lo es proteger archivos considerados críticos, como por ejemplo los archivos de configuración. Si bien usar un gestor de contenidos web nos facilita mucho las cosas, éstos responden a esquemas fijos que se repiten en cada instalación y, por tanto, los archivos de configuración se encuentran en ubicaciones muy concretas y conocidas.

Si pensamos un momento en WordPress, el archivo wp-config.php (que se encuentra en el raíz) almacena la dirección de nuestra base de datos, la base de datos que usamos así como el usuario y la contraseña, una información de gran valor para un atacante externo. Para evitar el acceso a este tipo de archivos “singulares” podremos valernos de reglas como la siguiente para evitar que alguien acceda pueda acceder a nuestro archivo:

<files wp-config.php>

order allow,deny

deny from all

</files>

Otro detalle a tener en cuenta es la protección de carpetas críticas a las que nadie, salvo un administrador, debería poder entrar. ¿Y de qué tipo de carpetas estamos hablando? Si retomamos el ejemplo de WordPress, nadie debería poder entrar en la carpeta de los plugins o en la carpeta uploads y así evitar que alguien recopile más información de la cuenta. ¿Y qué podemos hacer en estos casos? Una buena forma, y elegante, de evitar el acceso es forzar una redirección hacia nuestra página principal siguiendo esquemas como:

¿Cómo hacer una redirección 301 por .htaccess con ModRewrite?

Mediante una Redirección 301 conseguiremos desviar el tráfico de un dominio a otro y hacer que los buscadores sepan de nuestro cambio.

 

Para redireccionar nuestro dominio a otro dominio o URL deberemos indicar los siguientes parámetros en el archivo .htaccess de la raíz de nuestro alojamiento, siempre y cuando nuestro servidor tenga activado el ModRewrite en el Apache. Nuestro servicio de hosting en Webdeing.xyz tiene activado este parámetro por lo que este tipo de redirección se puede realizar sin problemas.

RewriteEngine On
RewriteRule .* http://www.otraurl.com/ [R=301]

 

Proteger el fichero wp-config.php

Es el fichero más importante de tu instalación WordPress. Es donde se guardan todos los datos de configuración de tu WordPress. Si cayera en malas manos podrían hacer cualquier cosa con tu WordPress.

El fichero wp-config.php se encuentra en el directorio raíz y conviene protegerlo.

Con este código en .htaccess lo podrás hacer sin problemas:

<files wp-config.php>Order allow,denyDeny from all</files>

 

Proteger tu WordPress y bloquear los bots

Evitar bots maliciosos que consumen recursos en tu servidor debe ser algo que te tomes bien en serio. Si te fijas en el fichero htaccess que te hemos dejado antes, estas serían las líneas para bloquear algunos bots:

RewriteCond %{HTTP_USER_AGENT} «^Mozilla.*Indy» [NC,OR]RewriteCond %{HTTP_USER_AGENT} «^Mozilla.*NEWT» [NC,OR]RewriteCond %{HTTP_USER_AGENT} «^$» [NC,OR]RewriteCond %{HTTP_USER_AGENT} «^Maxthon$» [NC,OR]RewriteCond %{HTTP_USER_AGENT} «^SeaMonkey$» [NC,OR]

Y estas para bloquear los abusos de HTTP (el famoso semalt que te aparecerá seguramente en Google Analytics):

RewriteCond %{HTTP_REFERER} «^https?://(?:[^/]+\.)?semalt\.com» [NC,OR]RewriteCond %{HTTP_REFERER} «^https?://(?:[^/]+\.)?kambasoft\.com» [NC,OR]RewriteCond %{HTTP_REFERER} «^https?://(?:[^/]+\.)?savetubevideo\.com» [NC]

WordPress modifica el archivo .htaccess para ajustar su funcionamiento (mediante la función save_mod_rewrite_rules()), sobretodo cuando hablamos de URL o slugs, ya que el .htaccess nos permite configurar fácilmente las URL amigables o permalinks amigables.

Este es el archivo .htaccess nativo por defecto de un WordPress con URL amigables activados:

1

2

3

4

5

6

7

8

9

10

# BEGIN WordPress

<IfModule mod_rewrite.c>

RewriteEngine On

RewriteBase /

RewriteRule ^index\.php$ – [L]

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule . /index.php [L]

</IfModule>

# END WordPress