http à https à http à l'aide de mod_rewrite et du serveur IBM http
-
05-07-2019 - |
Question
Ok, je dispose d'une configuration apache IBM HTTP Server WAS 6.1
J'ai mes 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.
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