7 votos

El uso de Mod_rewrite y Autenticación en TODAS las direcciones Url

Tengo una necesidad para asegurarse de que mi url, lo llaman www.domain.com está siempre protegido, al menos, a través de la autenticación HTTP Básica. También, quiero usar mod_rewrite para enviar a mis usuarios para que uno de los dos OC4j instancias que se ejecutan en el servidor. También quiero proteger a mi OC4j panel de administración (y otras de tipo administrativo funciones) con este mismo autenticación. Voy a tener 2 usuarios, llamados admin (admin tendrá acceso tanto a la OC4j instancias y el OC4j panel de administración) y guest (invitado sólo será capaz de alcanzar el OC4j casos).

Así que, digamos que tengo dos OC4j instancias-- instance_a y instance_b. instance_a se ejecuta en el puerto 8888 y instance_b se ejecuta en el puerto 8889. Cuando un usuario escribe www.domain.com/instance_a quiero para asegurarse primero de que está autenticado en el servidor, entonces quiero usar mod_rewrite para enviar la solicitud www.domain.com:8888/instance_a. A este le sigue el juego para instance_b. De nuevo, CUALQUIER usuario, administrador o invitado, puede llegar a estas instancias. Si el usuario intenta ir a la OC4j panel de administración directamente para cualquiera de los dos casos, quiero patear a ellos si no es un usuario administrador.

Tengo un VirtualHost entrada que se ve algo como esto:

<VirtualHost *:80>
        ServerName www.domain.com
        CustomLog "/var/log/httpd/ic/access_log" "combined"
        ErrorLog "/var/log/httpd/ic/error_log"
        RewriteEngine on
        RewriteLogLevel 9
        RewriteLog "/var/log/httpd/rewrite_log"
        RewriteCond %{REMOTE_USER} !^guest$ [OR]
        RewriteCond %{REMOTE_USER} !^admin$
        RewriteCond %{REQUEST_URI} ^/instance_a.*$
        RewriteRule ^.*$ - [F,L]
        <LocationMatch "^/.*$">
                AuthType Basic
                AuthName "Please Login"
                AuthBasicProvider file
                AuthUserFile /usr/local/apache/passwd/passwords
                Require valid-user
        </LocationMatch>
</VirtualHost>

Por alguna razón esto no funciona (no me sorprende). Parece que al utilizar la Autenticación y el mod_rewrite de cosas que no funcionan juntos.

Gracias de antemano.

1voto

outis Puntos 608

Creo que el problema con la configuración tal y como se ha publicado es el primero de dos RewriteCond líneas:

    RewriteCond %{REMOTE_USER} !^guest$ [OR]
    RewriteCond %{REMOTE_USER} !^admin$

Si REMOTE_USER es 'admin', la primera prueba se realiza correctamente, causando una Prohibido respuesta. El caso de 'invitado' es similar. Usted podría intentar la combinación de las dos pruebas:

    RewriteCond %{REMOTE_USER} !^(guest|admin)$

Si REMOTE_USER es invitado o admin, ^(guest|admin)$ coinciden, el causante de todo RewriteCond a fallar.

0voto

Jordan S. Jones Puntos 1023

No estoy seguro si esto va a ayudar o no, pero usted puede querer tirar su Reescritura de Condiciones y/o Reglas de la LocationMatch y ponerlo antes/después de la LocationMatch.

0voto

MojoFilter Puntos 3730

Blimey.

Esto no está probado, pero quizás algo como:

<VirtualHost *:80>
        ServerName www.domain.com
        CustomLog "/var/log/httpd/ic/access_log" "combined"
        ErrorLog "/var/log/httpd/ic/error_log"
        RewriteEngine on
        RewriteRule ^(/instance_a/.*) http://localhost:8888/$1 [P]
        RewriteRule ^(/instance_b/.*) http://localhost:8889/$1 [P]
        <Proxy "http://localhost:888?/">
                AuthType Basic
                AuthName "Please Login"
                AuthBasicProvider file
                AuthUserFile /usr/local/apache/passwd/passwords
                Require valid-user
        </Proxy>
        <Proxy "http://localhost:888?/instance_?/admin">
                Require group admin
        </Proxy>
</VirtualHost>

No estoy seguro de si es necesario duplicar el auth directivas en cada Proxy bloque -- tendrá que experimentar.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: