Publicado el Jueves 12 de Julio del 2007 @ 1:44 por Armonth.
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.
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.
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
Siempre lo hice mediante el File Manager de mi hosting y nunca tuve ningún problema :|
Pues a mi el “Directory Protection”, hace algo como esto: “/ruta/al/.htpasswds/directory/passwd”
De todos modos, funciona bien; gracias :)
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.
Yo no logre que me dejara de tirar 404 :(
Aun colocando eso me sale el error 404
:(
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?