htaccess

Índice

There are no headings in this document.

El archivo .htaccess es un mecanismo que usan los servidores APACHE (y otros compatibles) para alterar o configurar el funcionamiento del servidor y realizar ajustes como denegar el acceso a ciertos recursos. mejorar la seguridad, etc.

Y si lo sabes utilizar también te ayudará a realizar un mejor SEO creando direcciones URL más limpias y amigables, mejorando la velocidad de carga de tu web, realizando redirecciones 301, solucionando errores 404 y mucho más.

Aunque precisamente debido a su gran potencia debes tener mucho cuidado si manipulas el archivo .htaccess, ya que cualquier pequeño error puede provocar problemas graves en tu sitio web o incluso impedir que se cargue.

Así que si no sabes bien lo que estás haciendo y no tienes experiencia editando este archivo, es mejor que no lo toques y que encargues la tarea a un profesional.

Cómo se usa el archivo .htaccess

Como su nombre indica, y al igual que sucede con el archivo robots.txt, .htaccess es un archivo de texto plano (txt) en el cual puedes incluir direcciones específicas (las llamamos "directivas") que tu servidor ejecutará cuando un visitante accede a tu sitio web.

El archivo siempre debe llamarse ".htaccess", y debes tener cuidado en añadir el punto (".") delante del nombre.

Puedes tener tantos archivos .htaccess como lo necesites, ya que las directivas que indicas en cada uno de ellos se aplican al directorio donde está colocado y a todos sus subdirectorios.

La mejor forma de incluirlo en tu sitio web es subirlo mediante FTP a tu directorio principal, teniendo cuidado de realizar la transferencia en modo "ASCII" y nunca en modo "BINARIO" (BINARY), y asegurándote de que el archivo tiene permiso para ejecutarse (755). Si no sabes de qué te hablo quizá no deberías tocar el archivo .htaccess.

Ejemplos de uso del archivo .htaccess

MUY IMPORTANTE: los códigos de ejemplo que te proporciono en este apartado deberían funcionar correctamente, pero no puedo garantizar que haya cometido algún error y que al usarlos te causen algún problema en tu sitio web.

Antes de tocar nada, por favor asegúrate de que sabes cómo deshacer los cambios que vayas a realizar, haz una copia de seguridad del archivo y asegúrate de que en todo momento tienes acceso a tu servidor mediante FTP para poder restaurar la copia si es necesario.

Si tienes cualquier duda o no estás completamente seguro de lo que estás haciendo, es mejor que dejes la tarea en manos de un profesional experimentado.

Archivo .htaccess por defecto en WordPress

Si usas WordPress es muy posible que al abrir tu fichero .htaccess compruebes que este CMS ha insertado algunas instrucciones que necesita para funcionar correctamente.

Verás algo así como esto:

# 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

En principio no debes tocar nada de lo que aparece en este bloque porque puedes provocar que WordPress deje de funcionar correctamente o incluso que dejes de tener acceso a la instalación como administrador.

Mejora la velocidad de carga de tu sitio web con .htaccess

Como probablemente ya sabes una de las formas más sencillas y seguras de mejorar la velocidad de carga de cualquier sitio web es guardar copias locales de tus archivos en el caché de navegador de los usuarios.

Los navegadores modernos normalmente guardan durante un tiempo una copia de los recursos que descargan al visualizar una página web, para evitar cargarlos de nuevo cuando visitas la misma página al poco tiempo.

Uno de los recursos que más "pesa" en casi todas las páginas son las imágenes, por eso es muy conveniente instruir al navegador del usuario para que las guarde durante cierto tiempo de forma que no tenga que volverlas a cargar, lo que mejora considerablemente la velocidad de carga de la página.

Usando el archivo .htaccess puedes dar instrucciones al navegador de tus visitantes para que guarde durante cierto tiempo copias locales de tus imágenes, u otros archivos que te interese cachear, usando los módulos que se encuentren disponibles en tu servidor (no todos lo están siempre) para estas tareas.

En el siguiente ejemplo usamos mod_headers para cachear localmente algunos tipos de archivos:

<IfModule mod_headers.c>

# Solicitamos que se cacheen estos tipos de archivo durante un mes (el tiempo se calcula en segundos)
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
Header set Cache-Control "max-age=2592000, public"
</FilesMatch>

# Solicitamos que se cacheen los archivos del tipo "xml" y "txt" durante dos días (el tiempo se calcula en segundos)
<FilesMatch "\.(xml|txt)$">
Header set Cache-Control "max-age=172800, public, must-revalidate"
</FilesMatch>

# Solicitamos que se cacheen estos archivos durante dos horas (el tiempo se calcula en segundos)
<FilesMatch "\.(html|htm)$">
Header set Cache-Control "max-age=7200, must-revalidate"
</FilesMatch>

</IfModule>

Y en este otro ejemplo usamos el módulo mod_gzip para comprimir los datos y que se descarguen más rápidamente:

<IfModule mod_gzip.c>
mod_gzip_on Yes
mod_gzip_dechunk Yes
mod_gzip_item_include file .(html?|txt|css|js|php|pl)$
mod_gzip_item_include handler ^cgi-script$
mod_gzip_item_include mime ^text/.*
mod_gzip_item_include mime ^application/x-javascript.*
mod_gzip_item_exclude rspheader ^Content-Encoding:.*gzip.*
</IfModule>

Crea direcciones URL más sencillas y amigables con .htaccess

Gracias a .htaccess puedes conseguir que las direcciones URL de tu sitio web sean más amigables y que resulte más fácil escribirlas en el navegador, además de que también se mostrarán más "limpias".

Por ejemplo puedes conseguir que una dirección como:

https://ninjaseo.es/seo-on-page.php

Se convierta en

https://ninjaseo.es/seo-on-page

Para eliminar (esconder) la extensión de archivo "html" en las URLs como en el ejemplo anterior podrías usar este código:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php-f
Rewrite Rule ^(.*)$ $1.php

Redirecciones con .htaccess

Redirección 301 con .htaccess

En ocasiones necesitas cambiar la dirección URL de alguna página o artículo ya publicado, pero te interesa conservar el tráfico, enlaces y autoridad que ya has generado, debes hacer uso de las redirecciones del servidor como por ejemplo la 301.

Si usas WordPress lo más sencillo es usar alguno de los plugins de redireccionamiento disponibles, pero si no deseas instalar otro plugin más para esta tarea puedes hacerlo directamente usando .htaccess con este código:

RewriteEngine On
RewriteRule ^/subdirectorio-original/pagina-o-articulo-original.?$ "https://www.dominio.com/subdirectorio-nuevo/nuevo-nombre" [R=301,L]

Redirección a protocolo seguro HTTPS con .htaccess

Para forzar una redirección hacia la versión segura (SSL) de tu sitio web puedes usar este código:

Si estamos usando HTTPS y queremos que solo se pueda acceder al sitio con ese protocolo:

RewriteEngine on
RewriteCond %{HTTPS} !on
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Redirección del subdominio "www" con .htaccess

Como ya sabes en la mayoría de los dominios obtienes la misma página cuando la escribes con o sin "www" delante, pero lo que tal vez no sepas es que en realidad están redirigiendo una dirección a la otra, ya que si pudieras acceder a la misma página usando dos direcciones diferentes acabarías teniendo problemas de contenido duplicado.

Para evitar estos problemas puedes usar .htaccess para redirigir las versiones con o sin www, simplemente usa el código que te interese en tu caso.

#Ejemplo 1: redirige todo el tráfico a la versión www
RewriteEngine on
RewriteCond %{HTTP_HOST} ^example.com [NC]
RewriteRule ^(.*)$ http://www.example.com/$1 [L,R=301,NC]
#Ejemplo 2: redirige todo el tráfico a la versión sin www
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www\.example\.com [NC]
RewriteRule ^(.*)$ http://example.com/$1 [L,R=301]

Muestra páginas de error 404 personalizadas con .htaccess

En lugar de mostrar la página de error 404 estándar generada por tu servidor o CMS puedes indicar que se muestre cualquier página de tu elección usando este código:

ErrorDocument 404 /pagina-error.html

Mejora la seguridad de tu sitio web con .htaccess

La seguridad de tu sitio web, y mantenerlo lo más protegido posible frente a ataque externos es muy importante, y .htaccess puede ayudarte bastante en este aspecto.

Lo primero que deberías hacer es proteger el propio archivo .htaccess para que no sea accesible y evitar que los hackers puedan leer su contenido, algo que puedes hacer con el siguiente código:

<Files .htaccess>
Order allow,deny
Deny from all
</Files>

A continuación es una buena práctica denegar también acceso externo al archivo de configuración de WordPress:

<Files wp-config.php>
order allow,deny
deny from all
</Files>

Por último también deberías impedir que los visitantes pueda ver el contenido de los directorios de tu servidor, añadiendo esta línea:

options All -Indexes

Protección avanzada de tu sitio web con .htaccess

Protección contra vulnerabilidades XST y XSS

Unos de los ataques más habituales son los que se aprovechan de las vulnerabilidades de algunos protocolos HTTP como XST ("Cross Site Tracing") y XSS ("Cross Site Scripting") para conseguir acceso a información protegida del servidor.

Gracias a .htaccess puede desactivar estos protocolos para evitar problemas:

rewriteEngine on
rewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
rewriteRule .* - [F]

Protege tu ancho de banda evitando el "hotlinking" o "robo" de recursos con .htaccess

Cuando otro sitio web inserta tus imágenes en sus propias páginas está "robando" tu ancho de banda, ya que la petición de descarga se envía a tu servidor en lugar de descargarlo desde el suyo.

Afortunadamente puedes protegerte fácilmente, incluso fastidiar al "ladrón" insertando una imagen denunciando el robo cada vez que usen tus recursos :

# Deniega las peticiones de inserción de recursos que no provengan de tu propio sitio web y muestra una imagen de denuncia
# Cambia dominio por el nombre de tu dominio, y no-robes.png por tu imagen de denuncia
RewriteCond "%{HTTP_REFERER}" "!^$"
RewriteCond "%{HTTP_REFERER}" "!www.dominio.com" [NC]
RewriteRule "\.(gif|jpg|png)$"    "/img/no-robes.png"   [R,NC]

Y si prefieres simplemente denegar el uso de tus recursos, pero no mostrar ninguna imagen en su lugar, usa este código:

# Deniega las peticiones de inserción de recursos que no provengan de tu propio sitio web
# Cambia dominio por el nombre de tu dominio
RewriteCond "%{HTTP_REFERER}" "!^$"
RewriteCond "%{HTTP_REFERER}" "!www.dominio.com" [NC]
RewriteRule "\.(gif|jpg|png)$" "-" [F,NC]

Recursos adicionales

Logo NinjaSEO
Copyright 2023 Javier Marcilla