Proteger tu sitio con contraseña con un archivo .htaccess

Generalidades

Este artículo explica cómo proteger con contraseña tu directorio a través de SSH creando un archivo .htaccess y .htpasswd. Los siguientes pasos están cubiertos en este artículo.

Crear los archivos

Ejemplos de WordPress y HTTPS

Usar el panel para proteger con contraseña tu sitio

La forma más fácil de proteger con contraseña tu sitio es usar la herramienta en el panel DreamHost. Navega a la página Htaccess/WebDAV Luego puedes configurar la protección con contraseña allí.

Sin acceso a tus archivos .htaccess y .htpasswd

Sin embargo, ten en cuenta que si usas la opción de panel, los archivos .htaccess y .htpasswd serán propiedad del servidor. Esto significa que no podrás editar manualmente ninguno de estos archivos si es necesario. Además, estas instrucciones sobrescribirán cualquier archivo .htaccess existente. Asegúrate de hacer una copia de seguridad de tu archivo .htaccess existente antes de comenzar estos pasos.

Si solo necesitas proteger con contraseña tu sitio y necesitas acceso a tu archivo .htaccess y .htpasswd en cualquier momento en el futuro, debes usar las instrucciones de este artículo para crear manualmente esos archivos.

En los siguientes ejemplos, cambia username a tu usuario Shell y example.com a tu sitio web.

Paso 1 — Crear el archivo .htpasswd

Puedes usar un archivo .htaccess para proteger con una contraseña un archivo o carpeta mediante la autenticación básica.

  1. Inicia sesión en tu servidor a través de SSH.
  2. Navega al directorio que deseas proteger con una contraseña.

    Si estás protegiendo con contraseña todo el sitio web, lo más probable es que sea example.com.

    [server]$ cd ~/example.com

    Si estás protegiendo con contraseña un subdirectorio como example.com/members, este iría a ese subdirectorio.

    [server]$ cd ~/example.com/members
  3. Corre pwd para confirmar la ruta completa del archivo a este directorio. Necesitarás esta ruta completa en el siguiente paso.
    [server]$ pwd
    /home/username/example.com
  4. Crea un archivo .htpasswd corriendo el siguiente comando en el directorio que deseas proteger con contraseña. Esto usa la utilidad htpasswd y la ruta completa al directorio. Por ejemplo, si el nombre de usuario que estás creando para iniciar sesión es user1, corre lo siguiente:
    [server]$ htpasswd -c /home/username/example.com/.htpasswd user1
  5. Ingresa una contraseña para el nuevo usuario llamado user1. El código en tu archivo .htpasswd luego muestra la contraseña encriptada así:
    user1:$apr1$bkS4zPQl$SyGLA9oP75L5uM5GHpe9A2

    Córrelo de nuevo (sin la opción -c) para cualquier otro usuario que desees permitir el acceso a tu directorio.

  6. Confirma que los permisos están configurados en 644 corriendo el siguiente comando.
    [server]$ chmod 644 .htpasswd

Revisa la siguiente página para más información:

Paso 2 — Crear el archivo .htaccess

A continuación, crea un archivo .htaccess usando el comando nano:

Asegúrate de agregar este archivo .htaccess en el mismo directorio en el que agregaste el archivo .htpasswd.

[server]$ nano .htaccess

Ejemplos de código para agregar al archivo .htaccess

Proteger un sitio web completo

Esta contraseña de ejemplo protege un sitio web completo al colocar los archivos en el directorio web principal del sitio.

Asegúrate de cambiar las líneas resaltadas por tu usuario, nombre de dominio y nombres de archivo específicos.

#Protect Directory
AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /home/username/example.com/.htpasswd
Require valid-user

Protege un solo archivo

Este ejemplo de contraseña protege un solo archivo llamado admin.php:

#Protect single file
<Files admin.php>
AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /home/username/example.com/.htpasswd
Require valid-user
</Files>

Protege múltiples archivos

Este ejemplo protege múltiples archivos tales como admin.php y staff.php.

#Protect multiple files
<FilesMatch "^(admin|staff).php$">
AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /home/username/example.com/.htpasswd
Require valid-user
</FilesMatch>

Código para proteger un subdirectorio de WordPress

Debido a cómo WordPress enruta todas las solicitudes de página, intentar acceder a un subdirectorio protegido por contraseña arrojará un error 404 Not Found. Para resolver esto, debes añadir una línea adicional al archivo .htaccess para hacer referencia a ErrorDocument.

Este ejemplo protege un subdirectorio llamado members.

ErrorDocument 401 default
    
#Protect Directory
AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /home/username/example.com/members/.htpasswd
Require valid-user

Forzar SSL (HTTPS) en la solicitud de inicio de sesión

Los siguientes pasos no son necesarios si tu sitio redirige automáticamente a HTTPS. Este es el caso de los certificados SSL agregados después de septiembre de 2020.

Si tienes un SSL anterior que actualmente no se redirige automáticamente (sin agregar ningún código personalizado a tu archivo .htaccess), comunícate con soporte para obtener ayuda.

Si tu sitio no usa un certificado SSL,, la solicitud de inicio de sesión que ves no está encriptada. Esto significa que tu contraseña se enviará como texto sin formato a través de http. Para cifrar este inicio de sesión, debes agregar un certificado SSL a tu dominio. Una vez agregues el certificado SSL, agrega el código a continuación para forzar SSL al iniciar sesión.

Este método evita el envío de una solicitud de contraseña .htaccess en una conexión no cifrada. Si deseas asegurarte de que tu servidor sólo sirve documentos a través de un canal SSL encriptado, entonces debes usar la directiva SSLRequireSSL con la opción +StrictRequire habilitada:

Paso 1 — Agregar código a tu archivo .htaccess

Los siguientes ejemplos de código obligan a que se cargue el mensaje de inicio de sesión mediante HTTPS. Sin embargo, asegúrate de haber configurado correctamente la URL base y el subdominio www como se menciona abajo.

Configurar una URL de base

Asegúrate de que la URL que ingreses en seguida de SSLRequire es la URL base de tu sitio web. Por ejemplo:

  • example.com: usa esto para el dominio primario o subdirectorio como example.com/blog
  • blog.example.com: usa esto para un subdoninio

El subdominio 'www'

NO incluyas www en frente de la URL si estás forzando la eliminación del subdominio www en tu panel.

  • example.com

Sin embargo, si estás forzando a que se agregue el subdominio www en tu panel , asegúrate de agregar www al nombre de dominio.

  • www.example.com

Además, puedes usar cualquier nombre de archivo que desees para tu documento 403. Debajo se llama error_redirect.php.

Si estás protegiendo con contraseña todo el sitio web

El siguiente ejemplo de código asume que has creado los archivos .htaccess, .htpasswd, y error_redirect.php en el directorio principal del sitio que estás protegiendo con contraseña.

SSLOptions +StrictRequire
SSLRequireSSL
SSLRequire %{HTTP_HOST} eq "example.com"
ErrorDocument 403 /error_redirect.php <Files /error_redirect.php> AuthType none </Files> #Protect Directory AuthName "Dialog prompt" AuthType Basic AuthUserFile /home/username/example.com/.htpasswd Require valid-user

Si solo estás protegiendo con una contraseña un subdirectorio

Si solo deseas proteger un solo subdirectorio y no todo el sitio, especifica el subdirectorio en tu archivo .htaccess como se muestra en el siguiente código:

El siguiente ejemplo de código asume que has creado los archivos .htaccess, .htpasswd, y error_redirect.php en el subdirectorio que estás protegiendo con contraseña.

SSLOptions +StrictRequire

SSLRequireSSL
SSLRequire %{HTTP_HOST} eq ".example.com"

ErrorDocument 403 /error_redirect.php

<Files /error_redirect.php>
  AuthType none
</Files>

#Protect Directory
AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /home/username/example.com/blog/.htpasswd
Require valid-user
  

Paso 2 — Agrega código a tu archivo error_redirect.php

Ahora que tu .htaccess redirigirá a la página de error, debes colocar algún código en esta página de error para redirigir correctamente a al inicio de sesión seguro. Agrega el siguiente código PHP.

<?php
    header("Location: https://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
?>

Si ahora intentas iniciar sesión, verás que tanto la URL como la solicitud de inicio de sesión cambian a https://example.com.

Problema con la renovación de un certificado 'Let's Encrypt'

El código puede hacer que un certificado 'Let's Encrypt' no se renueve correctamente. Si has agregado un certificado 'Let's Encrypt' a tu dominio, asegúrate de deshabilitar el código en tu archivo .htaccess cuando tu certificado esté a punto de renovarse. Una vez renovado, puedes volver a habilitar el código.

Ver también

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?