El archivo .htaccess por defecto de WordPress y lo que puedes añadir sin riesgo
Guía de .htaccess para WordPress
Archivo .htaccess por defecto de WordPress (sitio único y multisitio) | We.Inc
Las reglas .htaccess por defecto de WordPress para un sitio único y para multisitio con subcarpetas o subdominios, más añadidos seguros que bloquean wp-config.php y fuerzan HTTPS. Crea y copia el tuyo.
WordPress en Apache necesita un pequeño bloque .htaccess en la raíz del sitio que envía a index.php toda petición de un archivo o carpeta que no existe, y eso es lo que hace funcionar los enlaces permanentes amigables. Pega el bloque entre # BEGIN WordPress y # END WordPress, y pon tus propias reglas por encima de esos marcadores.
Las reescrituras son relativas a la raíz del sitio
RewriteRule ^index\.php$ - [L]
Las peticiones a index.php se dejan tal cual
RewriteCond %{REQUEST_FILENAME} !-f
Solo si no coincide ningún archivo real
RewriteCond %{REQUEST_FILENAME} !-d
Y no coincide ninguna carpeta real
RewriteRule . /index.php [L]
Todo lo demás se pasa a WordPress
Un .htaccess roto suele notarse porque todas las páginas salvo la de inicio devuelven 404, o porque todo el sitio devuelve un error 500 después de que un plugin lo edite. Elige abajo tu tipo de instalación, marca los extras que quieras y copia un archivo completo. La parte de WordPress coincide con las reglas publicadas en la documentación para desarrolladores de WordPress.
Elige sitio único, multisitio con subcarpetas o multisitio con subdominios.
Marca los extras que quieras. Cada uno se coloca por encima de los marcadores de WordPress para que WordPress nunca lo sobrescriba.
Copia el archivo, haz una copia de seguridad de tu .htaccess actual y sube el nuevo a la carpeta que contiene wp-config.php.
Carga una entrada y el área de administración para confirmarlo, luego ve a Ajustes, Enlaces permanentes y pulsa Guardar para que WordPress compruebe sus reglas.
Guarda una copia del archivo que funciona antes de que ningún plugin lo toque. Restaurar un archivo que sabes que funciona es más rápido que depurar un error 500.
Si puedes editar la configuración principal de Apache, pon ahí estas reglas. La propia documentación de Apache dice que .htaccess supone una búsqueda en cada directorio en cada petición.
No edites nunca a mano lo que hay entre los marcadores BEGIN y END de WordPress. WordPress puede reescribir esa sección al guardar los ajustes de enlaces permanentes.
Nginx ignora .htaccess por completo. En un servidor Nginx, esa misma función la cumple una línea try_files en el bloque server.
Preguntas frecuentes
¿Dónde está el archivo .htaccess en WordPress?
En la carpeta raíz de la instalación de WordPress, junto a wp-config.php y la carpeta wp-content. Su nombre empieza por un punto, así que los gestores de archivos y los clientes FTP suelen ocultarlo hasta que activas los archivos ocultos.
¿Cómo restauro el .htaccess por defecto de WordPress?
Sustituye el contenido del archivo por el bloque de sitio único de esta página, o cambia el nombre del archivo roto, ve a Ajustes, Enlaces permanentes en el panel y pulsa Guardar. WordPress escribe un bloque nuevo cuando puede escribir en el archivo.
¿Por qué recibo errores 404 en todas las páginas menos en la de inicio?
Casi siempre faltan las reglas de reescritura o mod_rewrite está desactivado. La página de inicio carga porque es el propio index.php; cada enlace permanente amigable necesita la regla que envía las rutas desconocidas a index.php.
¿Qué bloque de multisitio necesito?
El que corresponda a cómo se instaló la red. Los sitios en example.com/shop usan el bloque de subcarpetas; los sitios en shop.example.com usan el bloque de subdominios. Se diferencian en cómo quitan el prefijo del sitio de wp-admin y de las rutas de archivos.
¿Es seguro bloquear el acceso a wp-config.php en .htaccess?
Sí. PHP lee wp-config.php desde el disco, no a través de la web, así que denegar las peticiones web a ese archivo no afecta al sitio. La documentación de WordPress sugiere la misma regla FilesMatch que se muestra aquí.
Cómo funciona la reescritura
Apache lee las condiciones de arriba abajo. Una petición de una imagen u hoja de estilos real coincide con -f y se sirve directamente, una petición de una carpeta real coincide con -d, y todo lo demás cae hasta index.php, donde WordPress busca la entrada, la página o el archivo correspondiente a esa dirección.
La línea HTTP_AUTHORIZATION copia la cabecera Authorization en una variable que PHP puede leer. En algunas configuraciones de servidor, PHP no ve nunca esa cabecera de otro modo, y eso rompe los inicios de sesión que la usan.
Dónde van tus propias reglas
Pon las redirecciones, las reglas de HTTPS y los bloqueos de acceso por encima de # BEGIN WordPress. Las reglas se ejecutan en orden, así que una redirección colocada después del bloque de WordPress nunca se alcanzaría para la mayoría de URL.
Añade pocas reglas y pruébalas. Cada regla se ejecuta en cada petición, y una errata en cualquier punto del archivo tumba todo el sitio con un error 500.
Los tres bloques oficiales de WordPress
Estas son las reglas que WordPress documenta para cada tipo de instalación. Usa exactamente una de ellas.
Sitio único
El bloque para un sitio WordPress normal instalado en la raíz web.
Multisitio con subcarpetas
Para redes en las que cada sitio vive en una ruta como example.com/shop/.
Multisitio con subdominios
Para redes en las que cada sitio tiene su propio subdominio, como shop.example.com.
Añadidos seguros
Cada uno de estos va por encima de # BEGIN WordPress. Añádelos de uno en uno y recarga el sitio después de cada uno.
Denegar el acceso web a archivos sensibles
Usa la directiva Require de Apache 2.4, así que un servidor 2.2 más antiguo necesitaría la sintaxis antigua de Order y Deny.
Forzar HTTPS
Una redirección permanente 301 que conserva el host y la ruta. Si tu hosting ofrece un interruptor de HTTPS en su panel, usa ese y sáltate esto.
Generador de .htaccess
Tipo de instalación de WordPress
Sitio único
Multisitio, subcarpetas
Multisitio, subdominios
Extras colocados por encima del bloque de WordPress
Bloquear el acceso web a wp-config.php, .htaccess, .htpasswd y debug.log
Redirigir cada petición http:// a https://
Impedir que Apache liste el contenido de las carpetas sin archivo index
Tu archivo .htaccess
Activa la redirección a HTTPS solo cuando tu certificado funcione, o los visitantes verán una advertencia del navegador.