2012-08-30 25 views
5

Estoy trabajando en un sitio de Wordpress, y mis páginas están utilizando una estructura de enlace permanente que mod_rewrites para que parezcan directorios. Para algunas páginas, quiero usar la Autenticación básica para proteger con contraseña algunas de las páginas. ¿Cómo escribiría esto en mi archivo .htaccess? ¿Estoy protegiendo el archivo o la dirección reescrita?.htaccess, mod_rewrite y autenticación básica

+0

Lo único que estuvo a punto de tener éxito es que hice un directorio con el mismo nombre que la URL amigable (es decir,/friendlyurl /) y puse un archivo .htaccess allí solicitando la autenticación. Yendo a la página, me pidieron credenciales y luego me enviaron a un error prohibido 403. – Imaginary

Respuesta

7

No necesitará mod_rewrite para esto, es de esperar, esto debería hacer el truco:

SetEnvIfNoCase Request_URI ^/some/path/to/protect require_auth=true 
SetEnvIfNoCase Request_URI ^/another/protected/path require_auth=true 

# Auth stuff 
AuthUserFile /var/www/htpasswd 
AuthName "Password Protected" 
AuthType Basic 

# Setup a deny/allow 
Order Deny,Allow 
# Deny from everyone 
Deny from all 
# except if either of these are satisfied 
Satisfy any 
# 1. a valid authenticated user 
Require valid-user 
# or 2. the "require_auth" var is NOT set 
Allow from env=!require_auth 

El mod_auth y módulos mod_env deben tener precidence sobre mod_rewrite, por lo que su estructura de directorios falsa debe permanecer igual . Solo debe completar un SetEnvIfNoCase Request_URI ^/some/path/to/protect require_auth=true para cada uno, luego complete el resto de las autorizaciones para satisfacer sus necesidades.

+0

Bueno, no entiendo completamente por qué lo hizo, pero ... ¡eso lo hizo! Muchas gracias! ¡Estaba sudando esto durante la mitad del día! – Imaginary

+0

@Imaginary Esencialmente, si la variable de entorno 'require_auth' está * no * establecida, no hay necesidad de autenticación. Las directivas 'SetEnvIfNoCase' en la parte superior establece esa variable si la solicitud es para ciertos directorios (si existen o no). –

+0

¡Creo que lo tengo! Muy claro. ¡Gracias de nuevo! – Imaginary

0

El único problema que tengo con esta solución es que al hacer clic en el botón cancelar se mostrará la página protegida. Intenté resolver esto usando:

RewriteCond %{REMOTE_USER} !user 
RewriteRule ^/protected-page /unauthenticated-page [R=401] 

Pero eso no funcionó. No estoy seguro por qué.

para resolver el problema rápida y sucia que añade

ErrorDocument 401 "You don't have access." 

Para crear un redireccionamiento que utiliza este

ErrorDocument 401 '<html><head><meta http-equiv="refresh" content="0; url=/unauthenticated-page" /></head><body></body></html>' 
0

Para aquellos que vinieron aquí con el mismo problema que yo, con .htaccess como esto

AuthType Basic 
AuthName "some_name" 
AuthUserFile "/path/to/password/passwd" 
require valid-user 
<IfModule mod_rewrite.c> 
    RewriteEngine On 
    RewriteBase/
    RewriteRule ^index\.php$ - [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d 
    RewriteRule . /index.php [L] 
</IfModule> 

reglas anteriores no están funcionando como esperaba (autorizar, vuelva a grabar)

debido Directiva fusión de orden ("Si" se fusiona última)

gracias a comment from Alek señalar eso

así que cuando me quita soportes IfModule, las reglas han comenzado a trabajar para yo.

Cuestiones relacionadas