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.

10 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

  9. Gravatar de Astare Astare nos comenta:

    quizas te parezca tonto, pero tengo el blog en hosting24.1 no me deja cambiar pèrmisos de escritura para editar las hojas de estilos y que aparezca el bendito boton guardar, la hoja de estilos los tiene pero me da el mensajito de codex;luego de cambiarlos me decia que no tenia permiso para acceder al wpadmin del servidor, y el .htacces esta vacioooo!!no logro configurar los permisos, o son muy altos o no se que, y no lee los themas cargados en la carpeta themes. help?

    Miércoles, 1 de Abril/2009 @ 1:50

  10. Gravatar de Armonth Armonth nos comenta:

    Normalmente los permisos a utilizar son u=rw,g=r,o=r si son ficheros o u=rwx,g=rx,o=rx si son directorios.

    r de read (se puede leer), w de editable, x de ejecutable. U del usuario al que le pertenece el fichero, g al grupo que pertenece ese usuario y o para todos los demás.

    La “x” se pone en los directorios porque si no es “ejecutable” el directorio no puede ser accedido. Si no te deja poner estos permisos el problema lo tienes en tu hosting y es ahí donde debes solucionarlo.

    Miércoles, 1 de Abril/2009 @ 3:14

Comentarios cerrados