Gravatar de Armonth

Directorios con contraseña usando htaccess… y WordPress

Ayer tuve que pelearme con un .htaccess/.htpasswd para proteger mediante contraseña un directorio y me encontré con que WordPress devuelve un Error 404 si proteges directorios.

El problema viene de que WordPress mediante .htaccess coge control de las redirecciones para poder ofrecer permalinks y por ello al hacer un directorio protegido devuelve Error 404. Esto se vuelve especialmente molesto si el blog está en el índice del dominio ya que las reglas htaccess se propagan a todos los directorios inferiores. Después de buscar un poco he encontrado al fin una manera de solucionarlo.

Justo encima del código de WordPress en nuestro fichero .htaccess debemos añadir esto:

<Files .htaccess>
order allow,deny
deny from all
</Files>

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_URI} ^/directorio/(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^/failed_auth.html$
RewriteRule ^.*$ - [L]
</IfModule>

La primera parte es una medida de seguridad extra (opcional) para evitar que el fichero .htaccess pueda ser leído por un usuario accidentalmente, cosa que normalmente no es posible pero existen excepciones.

La segunda parte lo que hace es que todo lo que esté dentro de /directorio/ o el fichero /failed_auth.html sea redireccionado por defecto (ignorando por tanto las clausulas del WordPress).

Realmente no hace falta crear el fichero failed_auth.html pero es necesario especificarlo para que el htaccess funcione.

Ya que estamos: cómo proteger un directorio con htaccess y htpasswd

En el directorio a proteger toca poner un fichero .htaccess con el siguiente código:

AuthName "Texto al gusto"
AuthUserFile /ruta/al/fichero/.htpasswd
AuthType basic
Require valid-user

Lo único importante aquí es que la ruta al fichero .htpasswd debe ser correcta. Aparte de ello si queremos que sólo pueda acceder un usuario en particular podemos cambiar la última línea por:

Require user xxx

Donde ‘xxx’ es el nombre del usuario. Ahora toca generar el fichero .htpasswd para ello podemos usar el comando htpasswd o un generador online:

htpasswd -c file.txt mi-usuario
New password: mi-contraseña
Re-type new password: mi-contraseña
Adding password for user mi-usuario

Con esto nos genera un fichero file.txt con la sintaxis:

mi-usuario:contraseña-cifrada

El fichero file.txt tenemos que renombrarlo a .htpasswd y alojarlo en un sitio que no se pueda acceder por web. Si nuestras páginas accesibles al público están en tu-usuario/ht_docs/ entonces el fichero .htpasswd debe estar en tu-usuario/ pero nunca en tu-usuario/ht_docs. Esto es importante para evitar cualquier acceso accidental al fichero de contraseñas.

Eso es todo.

8 Comentarios (feed)

  1. Gravatar de j_aroche j_aroche nos comenta:

    Tuve exactamente el mismo problema con Wordpress y el directorio con contraseña dentro de él. Solo que yo lo solucione agregando un:

    ErrorDocument 403 /403.html

    Jueves, 12 de Julio/2007 @ 8:10

  2. Gravatar de Armonth Armonth nos comenta:

    Javier precisamente esa es una de las soluciones que intenté primero y no hubo manera. Como leí por ahí WP acepta el ErrorDocument y lo aplica cuando le da la real gana :·\

    Jueves, 12 de Julio/2007 @ 9:56

  3. Gravatar de Pablo Pablo nos comenta:

    Siempre lo hice mediante el File Manager de mi hosting y nunca tuve ningún problema :|

    Jueves, 12 de Julio/2007 @ 14:26

  4. Gravatar de filex filex nos comenta:

    Pues a mi el “Directory Protection”, hace algo como esto: “/ruta/al/.htpasswds/directory/passwd”

    De todos modos, funciona bien; gracias :)

    Martes, 17 de Julio/2007 @ 2:39

  5. Gravatar de Juansa Juansa nos comenta:

    Hector, me vino genial tu post. Tengo un WP en Dreamhost, hosteado sobre el / del dominio, instalé un sistema de estadísticas protegido con autenticación de apache y como a vos, me ocurría que no podía ingresar. Gracias por la ayuda, ya funciona todo genial.

    Jueves, 9 de Agosto/2007 @ 4:01

  6. Gravatar de ChS ChS nos comenta:

    Yo no logre que me dejara de tirar 404 :(

    Lunes, 20 de Agosto/2007 @ 19:15

  7. Gravatar de someone someone nos comenta:

    Aun colocando eso me sale el error 404
    :(

    Jueves, 4 de Octubre/2007 @ 17:13

  8. Gravatar de Armonth Armonth nos comenta:

    someone asegurate de crear el fichero failed_auth.html aunque éste vacío, de lo contrario seguirá dando error404. El código está tal como lo uso y funciona.

    Jueves, 4 de Octubre/2007 @ 20:34

No seas tímido, da tu opinión

Sé respetuoso con los demás, la diferencia de opiniones enriquece la discusión, los comentarios bajo ciertas circunstancias pueden ser moderados y requerir aprobación.