Saltar al contenido
Herramienta gratuita

Generador de .htaccess y generador de htpasswd

Con el generador de .htaccess puedes crear online un archivo .htaccess listo para usar a partir de módulos como redirecciones 301, HTTPS, protección con contraseña, caché y compresión. También genera .htpasswd con un hash bcrypt. Para example.com, por ejemplo, se crean reglas 301 que redirigen www.example.com y http a https://example.com. Gratis, sin registro y directamente en el navegador.

Creado por Dimitri Heissler

¿Estás creando algo propio? Alójalo en un VPS con control total.

Opcional. Solo es necesario para la regla www y la protección contra hotlinking. En ese caso, se aplica exclusivamente a este dominio.

Inicio rápido

El archivo generado aparece debajo de los componentes. Ir directamente al resultado

HTTPS y www

Fuerza HTTPS y establece si tu dirección debe llevar www o no.

Una forma de escritura uniforme evita el contenido duplicado en los buscadores. Introduce arriba tu dominio para que la regla solo se aplique a él.

  • Si tu sitio está detrás de Cloudflare, un balanceador de carga o un proxy inverso, Apache a menudo solo detecta HTTP y redirige indefinidamente (error ERR_TOO_MANY_REDIRECTS). En ese caso, activa «Detrás de un proxy».

Redirecciones

Redirige las direcciones antiguas a otras nuevas o traslada todo el dominio.

Protección con contraseña

Protege la página con un nombre de usuario y una contraseña, por ejemplo, una versión de prueba.

Acceso por IP

Permite únicamente determinadas direcciones IP o bloquea algunas.

Páginas de error

Muestra páginas personalizadas para los errores 404, 403, 500 y otros.

Caché del navegador

Establece cuánto tiempo conservan los navegadores las imágenes, los estilos y las fuentes.

Las imágenes y las fuentes cambian poco y admiten tiempos de caché largos. Para CSS y JavaScript, úsalos solo si los nombres de archivo incluyen un número de versión.

Compresión

Comprime los textos con Brotli y GZIP para transferirlos más rápido.

Solo se comprimen formatos de texto como HTML, CSS, JavaScript, JSON, XML y SVG. Las imágenes y los vídeos ya están comprimidos y no se modifican.

Impide que otros sitios web incrusten directamente tus imágenes.

Seguridad

Desactiva el listado de directorios y bloquea los archivos ocultos y los Backups.

  • Options -Indexes provoca un error 500 en algunos proveedores de hosting si no permiten Options en el archivo .htaccess. En ese caso, elimina la línea o solicita al soporte AllowOverride Options.

Cabeceras de seguridad

Establece X-Frame-Options, nosniff, Referrer-Policy, Permissions-Policy y HSTS.

Controla si otras páginas pueden insertar la tuya en un frame.

  • Permissions-Policy bloquea el acceso de la página a la cámara, el micrófono y la ubicación. Si necesitas alguno de ellos, por ejemplo para videollamadas o mapas, modifica la línea.

Valores de PHP

Aumenta el límite de subida, la memoria y el tiempo de ejecución de PHP.

Tus archivos

5 componentes activos

# .htaccess generado con el generador de .htaccess de ZAP-Hosting
# Antes de subirlo: haz una copia de seguridad y pruébalo primero en un entorno de pruebas.

# HTTPS y formato del dominio
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# General y seguridad
Options -Indexes
AddDefaultCharset UTF-8
ServerSignature Off
<IfModule mod_headers.c>
  Header always unset X-Powered-By
  Header unset X-Powered-By
</IfModule>
RewriteCond %{REQUEST_URI} !(^|/)\.well-known/ [NC]
RewriteRule (^|/)\. - [F]
<FilesMatch "\.(bak|sql|log|ini|swp|dist|orig|old|conf)$|~$">
  Require all denied
</FilesMatch>

# Cabeceras de seguridad
<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 "camera=(), microphone=(), geolocation=()"
</IfModule>

# Compresión
<IfModule mod_brotli.c>
  AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/css text/xml text/javascript application/javascript application/json application/ld+json application/xml application/xhtml+xml application/rss+xml application/atom+xml image/svg+xml image/x-icon font/ttf font/otf application/vnd.ms-fontobject
</IfModule>

<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript application/javascript application/json application/ld+json application/xml application/xhtml+xml application/rss+xml application/atom+xml image/svg+xml image/x-icon font/ttf font/otf application/vnd.ms-fontobject
</IfModule>

# Caché del navegador
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType image/gif "access plus 1 month"
  ExpiresByType image/webp "access plus 1 month"
  ExpiresByType image/avif "access plus 1 month"
  ExpiresByType image/svg+xml "access plus 1 month"
  ExpiresByType image/x-icon "access plus 1 month"
  ExpiresByType text/css "access plus 1 week"
  ExpiresByType text/javascript "access plus 1 week"
  ExpiresByType application/javascript "access plus 1 week"
  ExpiresByType font/woff "access plus 1 year"
  ExpiresByType font/woff2 "access plus 1 year"
  ExpiresByType font/ttf "access plus 1 year"
  ExpiresByType font/otf "access plus 1 year"
  ExpiresByType application/vnd.ms-fontobject "access plus 1 year"
  ExpiresByType video/mp4 "access plus 1 month"
  ExpiresByType video/webm "access plus 1 month"
  ExpiresByType audio/mpeg "access plus 1 month"
  ExpiresByType audio/ogg "access plus 1 month"
  ExpiresByType text/html "access plus 0 seconds"
  ExpiresByType application/xhtml+xml "access plus 0 seconds"
</IfModule>

64 líneas

Algunos navegadores eliminan el punto inicial o añaden .txt. Cambia el nombre del archivo descargado a .htaccess antes de subirlo.

Esto deberías comprobarlo

  • Si tu sitio está detrás de Cloudflare, un balanceador de carga o un proxy inverso, Apache a menudo solo detecta HTTP y redirige indefinidamente (error ERR_TOO_MANY_REDIRECTS). En ese caso, activa «Detrás de un proxy».

Antes de subirlo

  • Haz una copia de seguridad del archivo .htaccess existente, si lo hay.
  • Prueba primero el archivo en un sitio de pruebas, no en el sitio en producción.
  • Colócalo en el directorio raíz de tu dominio (normalmente public_html o htdocs). El nombre comienza con un punto.
  • Si después la página muestra un error 500, cambia el nombre del archivo por FTP y consulta el registro de errores de tu servidor.

Resultado de ejemplo

Qué te ofrece este generador de .htaccess

Activa las opciones que necesites y obtendrás un archivo .htaccess listo para copiar o descargar. Para la protección con contraseña también se genera un archivo .htpasswd con un hash bcrypt y, para los valores de PHP, un archivo .user.ini. Las configuraciones arriesgadas muestran una advertencia inmediata. Tres ejemplos:

Ejemplo 1: nueva web en example.com

Entrada:

  • Dominio: example.com
  • Forzar HTTPS y usar siempre la dirección sin www
  • Compresión GZIP activada
  • Caché: imágenes durante 1 mes, CSS y JavaScript durante 1 semana; comprobar siempre si hay cambios en el HTML
  • Desactivar las listas del directorio

Salida (.htaccess):

# .htaccess generado con el generador de .htaccess de ZAP-Hosting
# Antes de subirlo: haz una copia de seguridad y pruébalo primero en un entorno de pruebas.

# HTTPS y formato del dominio
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\.example\.com$ [NC]
RewriteRule ^ https://example.com%{REQUEST_URI} [L,R=301]
RewriteCond %{HTTPS} !=on
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

# General y seguridad
Options -Indexes

# Compresión
<IfModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/css text/xml text/javascript application/javascript application/json application/ld+json application/xml application/xhtml+xml application/rss+xml application/atom+xml image/svg+xml image/x-icon font/ttf font/otf application/vnd.ms-fontobject
</IfModule>

# Caché del navegador
<IfModule mod_expires.c>
  ExpiresActive On
  ExpiresByType image/jpeg "access plus 1 month"
  ExpiresByType image/png "access plus 1 month"
  ExpiresByType image/gif "access plus 1 month"
  ExpiresByType image/webp "access plus 1 month"
  ExpiresByType image/avif "access plus 1 month"
  ExpiresByType image/svg+xml "access plus 1 month"
  ExpiresByType image/x-icon "access plus 1 month"
  ExpiresByType text/css "access plus 1 week"
  ExpiresByType text/javascript "access plus 1 week"
  ExpiresByType application/javascript "access plus 1 week"
  ExpiresByType text/html "access plus 0 seconds"
  ExpiresByType application/xhtml+xml "access plus 0 seconds"
</IfModule>

Resultado en palabras: una dirección como http://www.example.com/seite pasa a https://example.com/seite con una sola redirección 301. Las visitas a http:// sin www también llegan a https:// mediante una redirección 301. Las imágenes permanecen 1 mes en la caché del navegador (max-age=2592000), CSS y JavaScript, 1 semana; las páginas HTML se comprueban de nuevo en cada visita. HTML, CSS, JavaScript y JSON se transfieren comprimidos con GZIP. Quien acceda a una carpeta sin archivo index ya no verá una lista de archivos, sino un error 403.

Ejemplo 2: página de staging protegida con contraseña

Entrada:

  • Texto de la solicitud de contraseña: pruebas
  • Ruta de .htpasswd: /home/example/.htpasswd
  • Usuario alice con la contraseña Sommer-2026!
  • Bloquear motores de búsqueda

Salida (.htaccess):

# .htaccess generado con el generador de .htaccess de ZAP-Hosting
# Antes de subirlo: haz una copia de seguridad y pruébalo primero en un entorno de pruebas.

# Protección con contraseña
AuthType Basic
AuthName "Staging"
AuthUserFile /home/example/.htpasswd
Require valid-user

<IfModule mod_headers.c>
  Header always set X-Robots-Tag "noindex, nofollow"
</IfModule>

Salida (.htpasswd):

alice:$2y$10$EixZaYVK1fsbw1ZfbX3OXevuQZIxS3zUD8zrCJEoRasNwfjhtG6f.

Resultado en palabras: los visitantes ven una ventana de inicio de sesión con el texto «Staging». Sin un usuario válido, el servidor devuelve el estado 401. El archivo .htpasswd solo contiene el hash bcrypt: $2y$ indica bcrypt, 10 es el factor de coste y después vienen la sal y el hash. La contraseña no aparece en ningún sitio. El archivo debe estar en la ruta indicada en AuthUserFile, preferiblemente fuera del directorio web.

Ejemplo 3: trasladar una página y eliminar otra

Entrada:

  • /old-page redirige con un 301 a /new-page, incluidas todas las rutas subordinadas
  • /summer-sale se ha eliminado permanentemente (410), solo esta ruta exacta

Salida (.htaccess):

# .htaccess generado con el generador de .htaccess de ZAP-Hosting
# Antes de subirlo: haz una copia de seguridad y pruébalo primero en un entorno de pruebas.

# Redirecciones propias
Redirect 301 /old-page /new-page
RedirectMatch 410 "^/summer-sale/?$"

Resultado en palabras: /old-page y /old-page/info redirigen con 301 a /new-page y /new-page/info, por lo que las subpáginas se conservan. /summer-sale devuelve el estado 410 (Gone) para que los buscadores retiren antes la página de su índice. Una dirección como /old-pages no se ve afectada porque la regla solo se aplica en los límites de los segmentos de la ruta. La herramienta también te advierte que el navegador recuerda permanentemente una redirección 301 y que deberías probar primero las reglas nuevas con 302.

Cómo funciona

Cómo creas un archivo .htaccess

Cuatro pasos desde la selección hasta el archivo probado, sin cuenta ni instalación.

Paso 1

Seleccionar bloques de construcción

Introduce tu dominio arriba y activa los módulos que necesites, o empieza con una plantilla: «Configuración básica recomendada», «Proteger el entorno de pruebas» o «Migrar dominio». Cada módulo explica brevemente qué hace.

Paso 2

Configurar opciones

Configura redirecciones con 301, 302, 307, 308 o 410, usuarios, páginas de error o tiempos de caché. La herramienta te avisa de ajustes arriesgados, como bucles de redirección, falta de HTTPS al proteger con contraseña o tiempos de caché demasiado largos.

Paso 3

Copiar o descargar archivo

El resultado se actualiza con cada cambio. Copia el archivo .htaccess o descárgalo. Para la protección con contraseña también se genera un archivo .htpasswd con el hash bcrypt y, para los valores de PHP, un archivo .user.ini.

Paso 4

Subir y probar

Haz una copia de seguridad del archivo existente, coloca el nuevo en el directorio raíz de tu dominio y abre la página. Prueba las redirecciones primero con 302 y después con 301.

Generador de htpasswd

Generador de htpasswd: crear .htpasswd con hash bcrypt

Para proteger con contraseña mediante .htaccess, además de .htaccess necesitas un archivo .htpasswd. Cada línea contiene un usuario y su contraseña cifrada. El generador de arriba crea la línea en el bloque «Protección con contraseña». Tu navegador calcula el hash y la contraseña no se envía a ningún sitio.

Estructura de un archivo .htpasswd

Una línea por usuario con el formato nombre de usuario:hash. Ejemplo para el usuario y la contraseña del ejemplo anterior:

alice:$2y$10$EixZaYVK1fsbw1ZfbX3OXevuQZIxS3zUD8zrCJEoRasNwfjhtG6f.

¿Qué hash es seguro?

bcrypt, reconocible por $2y$, es el hash recomendado y es compatible con Apache 2.4. Los formatos antiguos, como MD5 ($apr1$), SHA-1 o crypt, son más débiles y se pueden descifrar más rápido. Por eso, el generador crea hashes bcrypt.

Alternativa en el servidor

Con acceso a la shell, puedes crear el mismo archivo con el programa htpasswd. La opción -B utiliza bcrypt y -c crea un archivo nuevo:

htpasswd -cB .htpasswd benutzername

Tareas frecuentes

Redirección, HTTPS, protección con contraseña y WordPress mediante .htaccess: reglas listas para copiar

Los cuatro motivos más habituales para usar un archivo .htaccess, con reglas listas para usar. Adapta las rutas y el dominio, o deja que el generador de arriba los cree.

Redirección con .htaccess (301)

Redirect 301 redirige una página de forma permanente, incluido todo lo que hay bajo su ruta. /alte-seite/info pasa a ser /neue-seite/info. La regla debe ir en el archivo .htaccess del directorio raíz del dominio.

Redirect 301 /alte-seite /neue-seite

Forzar HTTPS con .htaccess

Redirige todas las solicitudes http a https mediante una redirección 301. Si el sitio está detrás de Cloudflare o de un proxy, también debes comprobar la cabecera X-Forwarded-Proto para evitar un bucle de redirecciones.

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Protección con contraseña mediante .htaccess

Solicita un nombre de usuario y una contraseña para acceder al directorio. En AuthUserFile se indica la ruta completa de .htpasswd en el servidor, preferiblemente fuera del directorio web.

AuthType Basic
AuthName "Área protegida"
AuthUserFile /pfad/zur/.htpasswd
Require valid-user

.htaccess para WordPress

Este es el bloque estándar que crea WordPress. No lo modifiques. Las reglas personalizadas, como las redirecciones o HTTPS, deben ir antes; de lo contrario, no se aplicarán.

# BEGIN WordPress
<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

Vista general

Las directivas de Apache que hay detrás de los bloques

Cada componente escribe unas cuantas directivas claramente identificadas en el archivo. La tabla muestra cuáles son y qué módulo de Apache se encarga de ellas. Si falta un módulo opcional, Apache ignora el bloque en lugar de mostrar un error.

Bloques de construcción, directivas de Apache y módulos correspondientes
Bloque de construcciónDirectivasMódulo de Apache
HTTPS y wwwRewriteCond, RewriteRule [R=301]mod_rewrite
RedireccionesRedirect, RedirectMatch, RewriteRulemod_alias, mod_rewrite
Protección con contraseñaAuthType Basic, AuthName, AuthUserFile, Require valid-usermod_auth_basic, mod_authn_file, mod_authz_user
Acceso por IPRequire ip, Require not ip, RequireAny, RequireAllmod_authz_host, mod_authz_core
Páginas de errorErrorDocumentcore
Caché del navegadorExpiresActive, ExpiresByTypemod_expires
CompresiónAddOutputFilterByType DEFLATE, BROTLI_COMPRESSmod_deflate, mod_brotli
Protección contra hotlinkingRewriteCond %{HTTP_REFERER}, RewriteRule [F]mod_rewrite
SeguridadOptions -Indexes, FilesMatch, ServerSignature Offcore, mod_authz_core
Cabeceras de seguridadHeader always setmod_headers
Valores de PHPphp_value, .user.inimod_php

Descubrir más

Más herramientas

FAQ

Preguntas frecuentes sobre Generador de .htaccess

Respuestas breves sobre .htaccess, redirecciones, protección por contraseña y esta herramienta.

El archivo .htaccess configura el servidor web Apache por directorio. Te permite gestionar redirecciones, protección con contraseña, páginas de error, caché, compresión y reglas de acceso sin modificar la configuración del servidor. Es especialmente útil en el hosting compartido. Apache y el servidor web LiteSpeed leen el archivo; nginx lo ignora. En nginx, las reglas deben ir en bloques server o location de su configuración. Apache vuelve a leer .htaccess en cada solicitud. Por eso, en un servidor propio, como un VPS, es mejor colocar las mismas reglas directamente en la configuración del host virtual.

El archivo se llama exactamente .htaccess, con un punto al principio y sin extensión. Debe colocarse en el directorio raíz de tu dominio, normalmente public_html, htdocs o httpdocs. Las reglas se aplican a la carpeta donde está el archivo y a todas sus subcarpetas. Como los archivos que empiezan por un punto se consideran ocultos, es posible que tu programa FTP no los muestre. Activa allí la visualización de archivos ocultos.

La forma más sencilla es la línea Redirect 301 /alte-seite /neue-seite. Redirige esa ruta y todo lo que contiene: /alte-seite/info pasa a /neue-seite/info. Si solo quieres redirigir una ruta exacta, usa RedirectMatch 301 con una expresión regular. El destino también puede ser una dirección completa, como https://beispiel.de/seite. El generador crea ambas variantes y te avisa si una regla produce un bucle. Además de 301 (permanente), ofrece 302 (temporal), 307, 308 y 410 para páginas eliminadas. Prueba primero las reglas nuevas con 302, ya que los navegadores almacenan las redirecciones 301 de forma permanente.

Activa el motor de reescritura, comprueba con RewriteCond si HTTPS está desactivado y redirige con RewriteRule mediante 301 a la dirección https. La opción «HTTPS y www» genera el bloque completo. Si tu sitio está detrás de Cloudflare, un balanceador de carga o un proxy inverso, Apache suele detectar solo HTTP y redirigir indefinidamente; el navegador muestra ERR_TOO_MANY_REDIRECTS. En ese caso, activa «Detrás de un proxy», que también comprueba la cabecera X-Forwarded-Proto.

Necesitas dos archivos: .htaccess con AuthType Basic, AuthName, AuthUserFile y Require valid-user, y .htpasswd con una línea por usuario en formato name:hash. El generador crea ambos. La contraseña se cifra con bcrypt en tu navegador; lo reconocerás por el $2y$ al principio del hash. MD5 ($apr1$), SHA-1 y crypt son más débiles. Guarda .htpasswd fuera del directorio web y activa HTTPS, ya que Basic Auth envía las credenciales con cada solicitud. Si combinas la protección con contraseña con el módulo «Acceso por IP», elige «IP o contraseña» o «IP y contraseña»; el generador creará el bloque Require correspondiente.

Un error 500 casi siempre significa que Apache no entiende alguna línea. Las causas más frecuentes son un error tipográfico, una directiva cuyo módulo no está instalado en el servidor o un ajuste que tu proveedor no permite en .htaccess, como Options o php_value. Cambia el nombre del archivo por FTP y la página volverá a funcionar. El registro de errores del servidor indica el problema exacto. Los bloques de caché, compresión, cabeceras y PHP del generador están protegidos con IfModule y no provocan un error 500 si falta algún módulo. php_value solo funciona cuando PHP se ejecuta como módulo de Apache. Para PHP-FPM, el generador también proporciona los valores de PHP en un archivo .user.ini.

WordPress crea un bloque entre # BEGIN WordPress y # END WordPress que debes dejar sin cambios (aparece en la sección anterior para copiarlo). Añade antes las reglas generadas. Las redirecciones y las reglas HTTPS deben ir antes del bloque de WordPress; de lo contrario, no funcionarán porque WordPress envía todas las solicitudes a index.php. WordPress necesita el motor de reescritura para los enlaces permanentes, así que no lo desactives.

No. El generador funciona íntegramente en tu navegador: tus entradas no se envían a ningún servidor ni se guardan. El hash bcrypt también se genera localmente. La dirección solo contiene los nombres de los módulos activados, nunca dominios, rutas, direcciones IP ni contraseñas.

¿Tienes más preguntas?

Contactar con soporte
¿Estás creando algo propio?

Con un servidor propio, las reglas están donde deben estar: en tu configuración

En un VPS de ZAP-Hosting, tú controlas Apache o nginx sin las limitaciones del alojamiento compartido.

4,4/5 Trustpilot32.000+ Servidores activosDesde 2010

Sin configuración. Sin riesgos. En línea en segundos.

Duración flexibleCancelable en cualquier momentoEn línea en 60 segundos

¿Buscas más herramientas? Ver todas las herramientas para desarrolladores