Pergunta

Ok eu tenho um apache IBM HTTP Server WAS 6.1 configurar

eu tenho meu certs instalado corretamente e pode carregar com sucesso http e https Páginas.

Depois de um sucesso j_security_check autenticação via https, Eu quero a página agora autorizada (e todas as páginas subsequentes) para carregar como http.

Eu quero que tudo isso funcione com mod_rewrite Porque não quero alterar o código do aplicativo para algo que realmente deve ser simples de fazer no servidor da web.

Eu pensaria que isso funcionaria, mas não funcionaria e eu temo que seja porque j_security_check está contornando mod_rewrite de alguma forma.

RewriteCond %{HTTPS} =off
RewriteCond %{THE_REQUEST} login\.jsp.*action=init [OR]
RewriteCond %{THE_REQUEST} login\.jsp.*action=submit
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]     <<-- this rule is working

RewriteCond %{HTTPS} =on
RewriteCond %{THE_REQUEST} !login\.jsp.*action=init [OR]
RewriteCond %{THE_REQUEST} !login\.jsp.*action=submit
RewriteRule .* http://%{SERVER_NAME}%{REQUEST_URI} [R,L] <--- this rule is not working or the condition is not returning true

Eu conheço o [R,L] forçará a regra executada a ser a última regra a ser executada em uma solicitação e redirecionar de acordo.

Encontrei esta jóia depois de um pouco do google.

mod_rewrite: My rules are ignored. Nothing is written to the rewrite log.
The most common cause of this is placing mod_rewrite directives at global scope (outside of any VirtualHost containers) but expecting the directives to apply to requests which were matched by a VirtualHost container.

In this example, the mod_rewrite configuration will be ignored for requests which are received on port 443:

    RewriteEngine On
    RewriteRule ^index.htm$ index.html

    <VirtualHost *:443>
    existing vhost directives
    </VirtualHost>

Unlike most configurable features, the mod_rewrite configuration is not inherited by default within a <VirtualHost > container. To have global mod_rewrite directives apply to a VirtualHost, add these two extra directives to the VirtualHost container:

    <VirtualHost *:443>
    existing vhost directives
    RewriteEngine On
    RewriteOptions Inherit
    </VirtualHost>

Adicionando a declaração de herdamento ao meu single virtualhost Declaração que aponta para o IP da máquina e port 443 não ajudou nem um pouco.

Agora eu sei que meu servidor de aplicativos se comunica 9080 e 9443 respectivamente, mas não consigo encontrar um único virtualhost no servidor da web httpd.conf.

Eu fiz alguns testes com diferentes regras de reescrita, sem autenticação e vi que meu mod rewrite código funcionou ..

Então: como faço para fazer o WebSphere usar o mod reescrever após a autenticação?

É como se o servidor da web fosse usado apenas para solicitações não autenticadas e, depois disso, algum contêiner Blackbox serve tudo de alguma forma.

Foi útil?

Solução

Esta é a solução para http para https para http

Você precisa colocar a condição e a regra de reescrita no host virtual, como a arctícula, disse, mas por algum motivo a herança não queria trabalhar.

RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /path/login\.jsp\ HTTP/1\.1
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R,L]

   <VirtualHost 000.000.000.000:443>
    ServerName servername
    ServerAlias url.com machinename
    DocumentRoot d:/ibmhttpserver61/htdocs/en_US
    ErrorLog d:/ibmhttpserver61/logs/secerr.log
    TransferLog d:/ibmhttpserver61/logs/sectrans.log
    SSLEnable
    Keyfile d:/ibmhttpserver61/ssl/ctxroot.kdb
    SSLV2Timeout 100
    SSLV3Timeout 1000 

    RewriteEngine On
    RewriteCond %{REQUEST_URI} /path/secure/index.jsf
    RewriteRule ^(.*)$ http://url/path/secure/index.jsf [R,L]    

    </VirtualHost>

Outras dicas

Pensamento selvagem: o segundo lógico ou deve ser um e (ou seja, não [ou] e o reescrito padrão de reescrita para e)?

RewriteCond %{THE_REQUEST} !login\.jsp.*action=init
RewriteCond %{THE_REQUEST} !login\.jsp.*action=submit
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top