Question

Ok, je dispose d'une configuration apache IBM HTTP Server WAS 6.1

.

J'ai mes certificats correctement installés et je peux charger avec succès les pages http et https .

Après une authentification j_security_check réussie via https , je souhaite que la page désormais autorisée (ainsi que toutes les pages suivantes) soit chargée en tant que http .

Je souhaite que tout cela fonctionne avec mod_rewrite car je ne souhaite pas modifier le code de l'application pour une tâche qui devrait être simple à effectuer sur le serveur Web.

Je pense que cela fonctionnerait, mais cela ne fonctionne pas et je crains que ce ne soit parce que j_security_check ignore en quelque sorte mod_rewrite .

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

Je sais que le [R, L] forcera la règle exécutée à être la dernière règle à être exécutée sur une demande et à être redirigée en conséquence.

J'ai trouvé ce petit bijou après une petite recherche sur 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>

L'ajout de la déclaration Inherit à ma seule déclaration virtualhost pointant vers l'ip de la machine et le port 443 n'a pas aidé un bit.

Je sais maintenant que mon serveur d'applications communique respectivement sur 9080 et 9443 , mais je ne trouve pas un seul virtualhost sur le serveur Web. httpd.conf .

J'ai effectué des tests avec différentes règles de réécriture sans authentification et j'ai constaté que mon code de réécriture de mod fonctionnait ..

Alors, comment faire en sorte que Websphere utilise le mod rewrite après l'authentification?

C’est comme si le serveur Web n’était utilisé que pour les requêtes non authentifiées, puis que certains conteneurs de boîtes noires étaient tout à fait utiles.

Était-ce utile?

La solution

Ceci est la solution pour http to https to http

Vous devez définir la condition et la règle de réécriture dans l'hôte virtuel, comme l'a dit arcticle, mais pour une raison quelconque, l'héritage ne voulait pas fonctionner.

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>

Autres conseils

Devinette: le deuxième OU logique doit-il être un AND (c'est-à-dire non [OR] et le paramètre RewriteCond par défaut est AND)?

RewriteCond %{THE_REQUEST} !login\.jsp.*action=init
RewriteCond %{THE_REQUEST} !login\.jsp.*action=submit
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top