Preciso ter certeza de que meu URL, chamado www.domain.com, esteja sempre protegido pelo menos através da autenticação HTTP básica. Além disso, quero usar o mod_rewrite para enviar meus usuários para uma das duas instâncias do OC4j em execução no meu servidor. Também quero proteger meu painel de administração do OC4j (e outras funções do tipo administrador) com a mesma autenticação. Vou ter 2 usuários, chamá-los de administrador (o administrador terá acesso às instâncias do OC4j e ao painel de administração do OC4j) e convidado (o convidado poderá acessar apenas as instâncias do OC4j).
Então, digamos que eu tenho duas instâncias do OC4j - instance_a e instance_b. instance_a será executado na porta 8888 e instance_b será executado na porta 8889. Quando um usuário digita www.domain.com/instance_a, quero primeiro verificar se eles estão autenticados no servidor, e quero usar mod_rewrite para proxy da solicitação para www .domain.com: 8888 / instance_a. Isso seguirá o exemplo de instance_b. Novamente, QUALQUER usuário, administrador ou convidado, pode acessar essas instâncias. Se o usuário tentar acessar o painel de administração do OC4j diretamente em qualquer uma das instâncias, desejo expulsá-lo se ele não for um usuário administrador.
Eu tenho uma entrada VirtualHost que se parece com isso:
<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 alguma razão, isso não está funcionando (não que eu esteja surpreso). Parece que quando eu uso os itens de autenticação e mod_rewrite, eles não funcionam juntos.
Desde já, obrigado.
fonte
Respostas:
Acredito que o problema com a configuração postada são as duas primeiras linhas RewriteCond:
Se REMOTE_USER for 'admin', o primeiro teste será bem-sucedido, causando uma resposta Proibida. O caso de 'convidado' é semelhante. Você pode tentar combinar os dois testes:
Se REMOTE_USER for convidado ou administrador,
^(guest|admin)$
corresponderá, fazendo com que todo o RewriteCond falhe.fonte
OR
sinalizador na primeiraRewriteCond
diretiva, para torná-lo um AND implícito . (Efetivamente o mesmo que sua regra combinada ...!^(guest|admin)$
)!guest AND !admin
(simplesmente removendo a[OR]
) seria o equivalente à sua regra combinada!(guest OR admin)
. Apenas outra maneira de expressar a mesma coisa.!
).Não tenho certeza se isso vai ajudar ou não, mas convém retirar as Regras / Condições de reescrita do LocationMatch e colocá-lo antes / depois do LocationMatch.
fonte
Caramba.
Isso não foi testado, mas talvez algo como:
Não tenho certeza se você precisa duplicar as diretivas de autenticação em cada
Proxy
bloco - você precisará experimentar.fonte