2010-04-09 17 views
7

Tengo un apache en la interfaz que redirige una solicitud mediante una regla de reescritura. tengo que poner una autenticación básica antes de redirigir una solicitud, por lo que poner esto en el fichero de configuración:apache: autenticación básica antes de reescribir

<VirtualHost *:443> 
    ServerAdmin xxxxxx 
    DocumentRoot /var/www/html/ 
    ServerName xxxxxxx 
    RewriteEngine on 
    ErrorLog logs/error.log 
    CustomLog logs/access_log common 

    <Directory /var/www/html/> 
     AuthType Basic 
     AuthName "Restricted Files" 
     AuthUserFile /etc/httpd/conf/tag.pwd 
     Require valid-user 
     RewriteRule ^/(.*) http://xxxxxx:xxx/$1 [P,L] 
    </Directory> 
</VirtualHost> 

pero que no funciona.

¿Alguna sugerencia?

+0

¿Qué esperabas que sucediera? ¿Lo que realmente pasó? ¿Qué hiciste para que esto sucediera? ¿Qué más has intentado? –

+0

Esperaría que todas las solicitudes después de la autenticación se redirijan con la regla RewriteRule ^/(. *) Http: // xxxxxx: xxx/$ 1 [P, L] pero esto no ocurre Apache busca en la página/var/www/html – pyro

Respuesta

5

he resuelto poner la condición de reescritura y volver a escribir la regla fuera de la directiva Locatio:

<Location /> 
    AuthType Basic 
    AuthName "Restricted Files" 
    AuthUserFile /etc/httpd/conf/tag.pwd 
    Require valid-user 
</Location> 
RewriteCond %{LA-U:REMOTE_USER} !^$ 
RewriteRule ^/(.*) http://xxxxxx:xxx/$1 [P,L] 

muchas gracias a h0tw1r3 por la sugerencia

* Tenga en cuenta que la ubicación directivas operan en direcciones URL, y no directorios. Eso significa que si alguien crea un alias en la raíz del documento, omitirá por completo estas reglas de autenticación. (Consulte http://httpd.apache.org/docs/2.0/mod/core.html#location para obtener más información.)

2

Actualización: regla de directorio implícita garantiza que la validación siempre se requiere antes de que se realice la reescritura. Se encontró que las diferentes combinaciones de módulos de apache modificaron el comportamiento, por lo tanto, la respuesta aceptada puede no funcionar siempre.

<Location /> 
    AuthType Basic 
    AuthName "Restricted Files" 
    AuthUserFile /etc/httpd/conf/tag.pwd 
    Require valid-user 
</Location> 

<Directory /documentroot> 
    RewriteCond %{LA-U:REMOTE_USER} (.+) 
    RewriteRule (.*) http://xxxxxx:xxx/$1 [P,L] 
</Directory> 
+0

mmm no funciona :(. apache continúa buscando en la página localmente – pyro

+0

Recientemente, esto volvió a ocurrir, incluso la respuesta aceptada de pyro no funcionó para mí en Apache 2.2.22 (Ubuntu). – h0tw1r3

10

En general, Apache realiza la fase de reescritura antes de la fase de autorización, por lo que su código realiza la reescritura sin pedir nunca que el usuario se autentique.

Puede solucionar esto con la variable LA-U:REMOTE_USER. Prefacio su RewriteRule con una condición que mira hacia adelante ("LA") a la fase de autorización:

RewriteCond %{LA-U:REMOTE_USER} !^$ 
RewriteRule ^/(.*) http://xxxxxx:xxx/$1 [L] 

Véanse las notas acerca de esto en http://httpd.apache.org/docs/current/mod/mod_rewrite.html#rewritecond

Como otros señalan, también es mejor tomar las directivas RewriteRule fuera del bloque para que sean más confiables.

Cuestiones relacionadas