http в https to http с использованием mod_rewrite и сервера IBM http

StackOverflow https://stackoverflow.com/questions/251246

  •  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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top