HTTP zu HTTPS zu HTTP unter Verwendung von Mod_rewrite und IBM HTTP Server
-
05-07-2019 - |
Frage
Ok, ich habe eine apache IBM HTTP Server WAS 6.1
Konfiguration
Ich habe meine certs
richtig installiert und kann erfolgreich geladen werden http
und https
Seiten.
Nach einem erfolgreichen j_security_check
Authentifizierung über https
, Ich möchte, dass die jetzt autorisierte Seite (und alle nachfolgenden Seiten) als laden http
.
Ich möchte, dass alles alles funktioniert mod_rewrite
Weil ich den Anwendungscode nicht für etwas ändern möchte, das auf dem Webserver wirklich einfach zu tun sein sollte.
Ich würde denken, das würde funktionieren, aber es nicht und ich fürchte, es liegt daran j_security_check
Umgangen mod_rewrite
irgendwie.
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
Ich kenne das [R,L]
wird die ausgeführte Regel dazu zwingen, die letzte Regel auf eine Anfrage auszuführen und entsprechend umzuleiten.
Ich habe dieses kleine Juwel nach ein wenig Google gefunden.
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>
Hinzufügen der Erbdeklaration zu meiner Single virtualhost
Erklärung, die auf die Maschinen -IP hinweist und port 443
Hat ein bisschen nicht geholfen.
Jetzt weiß ich, dass mein App -Server mit kommuniziert 9080
und 9443
jeweils aber ich kann keine einzelne finden virtualhost
auf dem Webserver httpd.conf
.
Ich habe einige Tests mit unterschiedlichen Umschreiben von Regeln durchgeführt, während ich nicht authentifiziert war und gesehen habe, dass mein mod rewrite
Code funktioniert ..
Also: Wie kann ich WebSphere -Verwenden von Mod -Umschreiben nach der Authentifizierung verwenden?
Es ist, als würde der Webserver nur für nicht authentifizierte Anforderungen verwendet, und danach serviert ein Blackbox -Container alles irgendwie.
Lösung
Dies ist die Lösung für HTTP zu HTTPS zu HTTP
Sie müssen die Bedingung und die Umschreibregel in den virtuellen Host wie der Arcticle sagen, aber aus irgendeinem Grund wollte die Vererbung nicht funktionieren.
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>
Andere Tipps
Wilde Vermutung: Sollte der zweite logische oder sein und (dh nein [oder] und die Umschreiber standardmäßig und)?
RewriteCond %{THE_REQUEST} !login\.jsp.*action=init
RewriteCond %{THE_REQUEST} !login\.jsp.*action=submit