http в https to http с использованием mod_rewrite и сервера IBM http
-
05-07-2019 - |
Вопрос
Хорошо, у меня есть apache IBM HTTP Server WAS 6.1
setup
У меня правильно установлены certs
и я могу успешно загружать страницы http
и https
.
После успешной аутентификации j_security_check
через https
я хочу, чтобы теперь авторизованная страница (и все последующие страницы) загружалась как http
. р>
Я хочу, чтобы все это работало с mod_rewrite
, потому что я не хочу менять код приложения на то, что действительно должно быть просто сделать на веб-сервере.
Я думаю, что это будет работать, но это не так, и я боюсь, что это потому, что j_security_check
как-то обходит 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
Я знаю, что [R, L]
заставит выполненное правило быть последним правилом, запущенным по запросу и соответствующим образом перенаправленным.
Я нашел эту маленькую драгоценность после небольшого гугления.
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>
Добавление объявления Inherit к моему единственному объявлению virtualhost
, которое указывает на ip компьютера и порт 443
, НЕ помогло ни на один бит.
Теперь я знаю, что мой сервер приложений взаимодействует с 9080
и 9443
соответственно, но я не могу найти ни одного virtualhost
на веб-сервере <код> httpd.conf код>. Р>
Я провел некоторое тестирование с другими правилами перезаписи, не проходя проверку подлинности, и увидел, что мой код rewrite
mod работает ...
Итак: как мне заставить websphere использовать перезапись мод после аутентификации?
Похоже, что веб-сервер используется только для неаутентифицированных запросов, и после этого какой-то контейнер черного ящика как-то обслуживает все.
Решение
Это решение для http на https to http
Вы должны поместить условие и правило перезаписи в виртуальный хост, как сказано в арктике, но по какой-то причине наследование не хотело работать.
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>
Другие советы
Догадка: должно ли второе логическое ИЛИ быть И (т. е. нет [ИЛИ], а RewriteCond по умолчанию И)?
RewriteCond %{THE_REQUEST} !login\.jsp.*action=init
RewriteCond %{THE_REQUEST} !login\.jsp.*action=submit