http в https to http с использованием mod_rewrite и сервера IBM http - PullRequest
3 голосов
/ 30 октября 2008

Хорошо, у меня есть apache IBM HTTP Server WAS 6.1 настройка

Я правильно установил 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 компьютера и port 443, НЕ помогло ни на один бит.

Теперь я знаю, что мой сервер приложений обменивается данными 9080 и 9443 соответственно, но я не могу найти ни одного virtualhost на веб-сервере httpd.conf.

Я провел некоторое тестирование с другими правилами перезаписи, пока не прошел проверку подлинности, и увидел, что мой mod rewrite код работает ..

Итак: как сделать так, чтобы websphere использовал перезапись мод после аутентификации?

Как будто веб-сервер используется только для неаутентифицированных запросов, и после этого какой-то контейнер черного ящика как-то обслуживает все.

Ответы [ 2 ]

0 голосов
/ 31 октября 2008

Это решение для 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>
0 голосов
/ 31 октября 2008

Дикая догадка: должно ли второе логическое ИЛИ быть И (т. Е. Нет [ИЛИ], а RewriteCond по умолчанию имеет И)?

RewriteCond %{THE_REQUEST} !login\.jsp.*action=init
RewriteCond %{THE_REQUEST} !login\.jsp.*action=submit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...