Linkjet

.htaccess para WordPress: los 10 fragmentos más útiles (con generador)

Cada guía técnica sobre WordPress asume en algún punto que sabes qué añadir a tu .htaccess, y muy pocas te enseñan el código exacto. Esta es una chuleta de .htaccess wordpress: qué es este archivo, qué no debes tocar nunca y los diez fragmentos que de verdad se usan en producción, listos para copiar o para generar con un clic.

Tarde o temprano acabas ahí: un tutorial te dice "añade esto a tu .htaccess" y te deja solo con la mitad de la información. Este artículo reúne los diez fragmentos de .htaccess wordpress que de verdad se usan en sitios en producción, explicados uno a uno, con el código exacto y sin dar por hecho que ya sabes de qué archivo estamos hablando.

Qué es el archivo .htaccess

El .htaccess es un archivo de configuración de texto plano que vive en la carpeta raíz de tu instalación de WordPress -al mismo nivel que wp-config.php. Lo lee el servidor web en cada petición, y te permite cambiar comportamientos como redirecciones, caché o cabeceras HTTP sin tocar la configuración global del servidor ni reiniciar nada.

Aquí está el matiz que casi nadie explica: el .htaccess solo funciona en Apache y, con las directivas más comunes, en LiteSpeed, que lo lee de forma compatible. Si tu hosting corre sobre Nginx, este archivo simplemente no existe ni se procesa; las mismas reglas hay que definirlas en el bloque server de nginx.conf, con una sintaxis distinta. Antes de copiar cualquier fragmento de este artículo, comprueba con tu proveedor de hosting qué servidor web usas. La mayoría del hosting compartido orientado a WordPress sigue siendo Apache o LiteSpeed, así que en la práctica esto afecta a una minoría, pero es la primera pregunta que hay que responder.

El bloque propio de WordPress: no lo toques

Si abres el .htaccess de cualquier instalación de WordPress con permalinks bonitos activados, vas a encontrar un bloque como este, normalmente al principio del archivo:

# BEGIN WordPress
# The directives (lines) between "BEGIN WordPress" and "END WordPress" are
# dynamically generated, and should only be modified via WordPress filters.
# Any changes to the directives between these markers will be overwritten.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Ese bloque es el que hace que tus URLs con estructura bonita -/blog/mi-articulo/ en vez de /?p=123- lleguen todas a index.php, que es quien decide qué mostrar. WordPress lo regenera automáticamente cada vez que guardas los ajustes de enlaces permanentes, así que si lo editas a mano, tu cambio puede desaparecer sin aviso en el próximo guardado. La norma es sencilla: todo lo que añadas tú va fuera de este bloque, normalmente antes de # BEGIN WordPress.

Antes de seguir: haz una copia del .htaccess actual -basta con descargarlo por FTP o copiarlo desde el gestor de archivos de tu hosting. Un solo carácter fuera de sitio en este archivo puede devolver un error 500 en toda la web, sin distinguir entre visitantes ni administradores. Si algo sale mal, sube de vuelta la copia y todo vuelve a funcionar.

Móntalo con clics: generador gratuito de .htaccess

Si prefieres no escribir las reglas a mano, nuestro generador arma un archivo comentado con estos mismos módulos: marcas casillas y copias o descargas el resultado, sin subir nada a ningún servidor.

Abrir el generador

Los 10 fragmentos más útiles de .htaccess para WordPress

Todos los fragmentos siguientes van fuera del bloque # BEGIN WordPress / # END WordPress, normalmente antes. Puedes copiarlos directamente o generarlos todos juntos con el generador de .htaccess, que además evita errores de sintaxis al combinarlos.

1. Forzar HTTPS

Redirige cualquier visita por http a la versión https, para que el candado del navegador aparezca siempre, sin depender de que cada enlace interno ya apunte a https.

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{HTTPS} off
	RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

2. Unificar www o sin www

Elige una única versión de tu dominio -con o sin www.- y redirige la otra hacia ella. Sin esto, Google puede indexar ambas como sitios distintos y diluir tu posicionamiento entre las dos.

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{HTTP_HOST} ^www\. [NC]
	RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
	RewriteRule ^ %{REQUEST_SCHEME}://%1%{REQUEST_URI} [L,R=301]
</IfModule>

3. Redirecciones 301

Para cuando cambias la URL de una página o fusionas contenido. Si gestionas más de un puñado, un plugin como Linkjet resulta más manejable que editar .htaccess a mano -pero para un par de reglas puntuales, esto basta:

<IfModule mod_alias.c>
	# Redirige rutas antiguas a su nueva URL
	Redirect 301 /pagina-antigua https://tudominio.com/pagina-nueva
</IfModule>

4. Caché del navegador

Le dice al navegador cuánto tiempo puede reutilizar imágenes, CSS y JS sin volver a pedirlos al servidor, lo que acelera las visitas repetidas de un mismo usuario.

<IfModule mod_expires.c>
	ExpiresActive On
	ExpiresByType text/css "access plus 1 month"
	ExpiresByType application/javascript "access plus 1 month"
	ExpiresByType image/png "access plus 1 year"
	ExpiresByType image/jpeg "access plus 1 year"
	ExpiresByType image/webp "access plus 1 year"
	ExpiresByType font/woff2 "access plus 1 year"
</IfModule>

5. Compresión GZIP

Comprime los archivos de texto -HTML, CSS, JS, JSON- antes de enviarlos, así que llegan más rápido al navegador sin cambiar nada visualmente.

<IfModule mod_deflate.c>
	AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml
	AddOutputFilterByType DEFLATE application/javascript application/json
	AddOutputFilterByType DEFLATE image/svg+xml
</IfModule>

6. Cabeceras de seguridad

Un puñado de cabeceras HTTP que reducen la superficie de ataque de tu WordPress sin instalar ningún plugin adicional: evitan que el navegador adivine tipos de archivo, bloquean que tu web se cargue dentro de un iframe ajeno y limitan qué datos del navegador puede pedir cualquier script.

<IfModule mod_headers.c>
	Header always set X-Content-Type-Options "nosniff"
	Header always set X-Frame-Options "SAMEORIGIN"
	Header always set Referrer-Policy "strict-origin-when-cross-origin"
	Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
</IfModule>

7. Página 404 personalizada

WordPress ya sirve una plantilla 404 propia con el tema activo, pero si tu sitio devuelve errores 404 antes de que WordPress llegue a cargarse -por ejemplo con archivos estáticos-, esta línea define qué página se muestra en su lugar.

ErrorDocument 404 /404.html

8. Protección contra hotlinking

Impide que otras webs carguen tus imágenes directamente desde tu servidor -gastando tu ancho de banda- enlazándolas en su propio HTML. La regla deja pasar tus propias páginas y bloquea al resto.

<IfModule mod_rewrite.c>
	RewriteEngine On
	RewriteCond %{HTTP_REFERER} !^$
	RewriteCond %{HTTP_REFERER} !^https?://(www\.)?tudominio\.com [NC]
	RewriteRule \.(jpe?g|png|gif|webp|svg)$ - [F,NC,L]
</IfModule>

9. Desactivar el listado de directorios

Sin esta línea, cualquiera que abra en el navegador una carpeta de tu servidor sin un archivo index.php dentro -por ejemplo una carpeta de subidas mal configurada- ve la lista completa de sus archivos. Una línea la cierra.

Options -Indexes

10. Bloquear el acceso a dotfiles

Archivos como .env, .git o copias de seguridad con nombres que empiezan por punto no deberían ser accesibles desde el navegador nunca. Esta regla los bloquea todos, salvo la carpeta .well-known, que necesitan servicios externos como los certificados SSL.

<IfModule mod_rewrite.c>
	RewriteCond %{REQUEST_URI} "!(^|/)\.well-known/" [NC]
	RewriteRule "(^|/)\." - [F]
</IfModule>

Cómo probar el archivo sin arriesgar tu web en producción

Añade los fragmentos de uno en uno, no todos de golpe, y comprueba tu web en el navegador después de cada guardado. Si algo falla, sabrás exactamente cuál fue la última línea añadida. Si tu hosting ofrece un entorno de staging, pruébalo ahí primero -es el lugar ideal para combinar estos cambios con otras mejoras de rendimiento, como las que cubrimos en nuestra guía para acelerar WordPress.

Móntalo con clics: generador gratuito de .htaccess

Si editar código no es lo tuyo, el generador combina estos diez módulos por ti, te avisa antes de generar nada vacío y todo corre en tu navegador, sin subir nada a ningún servidor.

Abrir el generador

Redirecciones sin tocar el servidor

Si lo que más usas del .htaccess son las redirecciones 301, Linkjet te da lo mismo desde el escritorio de WordPress: cinco tipos de código, monitor de errores 404 y estadísticas de clics locales, todo gratuito.

Ver Linkjet

Preguntas frecuentes

¿Qué es el archivo .htaccess en WordPress?

Es un archivo de configuración de texto plano en la raíz de tu instalación que el servidor web lee en cada petición. Permite definir redirecciones, caché, cabeceras de seguridad y otras reglas sin tocar la configuración global del servidor. Solo funciona en servidores Apache y, de forma compatible, en LiteSpeed.

¿Existe el .htaccess en Nginx?

No. Nginx no lee archivos .htaccess bajo ningún concepto, ni siquiera si lo copias a la raíz del sitio. Las mismas reglas -redirecciones, caché, cabeceras- hay que definirlas directamente en el bloque server de nginx.conf, con una sintaxis distinta a la de Apache. Si no sabes qué servidor usa tu hosting, pregúntale a tu proveedor antes de intentar aplicar estos fragmentos.

¿Puedo editar el bloque # BEGIN WordPress sin problema?

No es recomendable. Ese bloque lo genera y regenera WordPress automáticamente cada vez que guardas los ajustes de enlaces permanentes, así que cualquier cambio manual dentro de él puede desaparecer sin aviso. Añade siempre tus propias reglas fuera de ese bloque, normalmente justo antes.

¿Qué pasa si me equivoco al editar el .htaccess?

Un error de sintaxis en este archivo -una etiqueta sin cerrar, una directiva mal escrita- puede tumbar toda la web con un error 500, visible para cualquier visitante. Por eso conviene hacer siempre una copia del archivo actual antes de tocarlo: si algo sale mal, subir de vuelta la copia por FTP soluciona el problema en segundos.

¿Es mejor usar estos fragmentos o un plugin?

Depende de qué necesites. Para reglas puntuales que deben sobrevivir aunque WordPress falle -como forzar HTTPS o bloquear dotfiles-, el .htaccess es la opción más fiable. Para tareas que cambian con frecuencia, como gestionar decenas de redirecciones 301, un plugin como Linkjet ofrece una vista centralizada y evita el riesgo de romper la sintaxis del archivo.

Si tu necesidad principal son las redirecciones, la guía completa está en redirecciones 301 en WordPress. Y si el objetivo es rendimiento general del sitio, no solo caché y GZIP, revisa nuestra guía para acelerar WordPress.

Volver al blog Un artículo de hafenstudios