Mod_rewrite для проблемы с косой чертой

Я вытягиваю свои волосы на том, что должно быть безумно простой проблемой. Мы запускаем WebSphere IHS (Apache) через F5 BigIP. BigIP делает для нас перевод https. Наш url (изменен для сети, недействителен) https://superniftyserver.com/lawson/portal.

Когда кто-то вводит только это без косой черты после портала, Apache предполагает, что "портал" будет файлом, а не каталогом. Когда Apache выясняет, что это такое, он отправляет 301 Постоянный переадресации. Но так как Apache знает только http, он отправляет URL как http://superniftyserver.com/lawson/portal/, который затем создает проблемы.

Итак, я попробовал изменить httpd.conf на уровне сервера для mod_rewrite, это одна из десятков комбинаций, которые я пробовал.

RewriteEngine on RewriteRule ^/lawson/portal (. *)/Lawson/portal/$1

Я также пробовал RewriteRule ^/lawson/portal $/lawson/portal/

Среди многих других вещей... Что мне не хватает?

Ответ 1

Если вы не можете получить ответ на синтаксис RewriteRule, вот еще два варианта для вас: Напишите пользовательский iRule на BigIp (см. F5 DevCentral), который ищет 301 ответ и конвертирует их в SSL; пусть URL-адрес переходит на ваш сервер WebSphere и выполняет программную переадресацию, которая отправляет HTTPS. Однако, поскольку F5 завершает соединение SSL, вы должны установить настраиваемый настраиваемый заголовок (см. PQ86347), поэтому Java request.getScheme() работает так, как вы ожидали.

Ответ 2

Фиксированный!

SOL6912: настройка профиля HTTP для перезаписи URL-адресов, чтобы перенаправления с HTTP-сервера указывали протокол HTTPS


Обновлено: 8/7/07 12:00 AM

Виртуальный сервер ClientSSL обычно настроен для приема HTTPS-соединений от клиента, дешифрования сеанса SSL и отправки незашифрованного HTTP-запроса на веб-сервер.

Когда запрошенный URI не включает конечную косую черту (косую черту, например /, в конце URI), некоторые веб-серверы генерируют перенаправление на вежливость. Без конечной косой черты веб-сервер сначала будет обрабатывать ресурс, указанный в URI в виде файла. Если файл не найден, веб-сервер может искать каталог с тем же именем, и если он найден, отправьте ответ HTTP перенаправления HTTP 302 обратно клиенту с завершающей косой чертой. Переадресация будет возвращена клиенту в режиме HTTP, а не HTTPS, что приведет к сбою сессии SSL.

Ниже приведен пример того, как ответ перенаправления HTTP 302 вызывает сбой сеанса SSL:

. Чтобы запросить сеанс SSL, пользователь будет https://www.f5.com/stuff без конечной косой черты.

. Клиентский браузер отправляет запрос SSL на виртуальный сервер ClientSSL, который находится в системе BIG-IP LTM.

. Затем система BIG-IP LTM расшифровывает запрос и отправляет команду GET/stuff на веб-сервер.

. Поскольку файл /stuff не существует на веб-сервере, но существует файл /stuff/virtual, веб-сервер отправляет ответ перенаправления HTTP 302 для каталога, но добавляет к нему ресурс. Когда веб-сервер отправляет ответ перенаправления HTTP 302, он указывает HTTP (не HTTPS).

· Когда клиент получает ответ перенаправления HTTP 302, он отправляет новый запрос виртуальному серверу BIG-IP LTM, который указывает HTTP (не HTTPS). В результате соединение SSL не выполняется.

Настройка профиля HTTP для перезаписи URL-адресов

В BIG-IP LTM версии 9.x вы можете настроить HTTP-профиль для перезаписи URL-адресов, чтобы перенаправления с HTTP-сервера указывали протокол HTTPS. Для этого выполните следующую процедуру:

  • Войдите в утилиту настройки.

  • Нажмите "Локальный трафик".

  • Нажмите "Профили".

  • Нажмите кнопку "Создать".

  • Введите имя профиля.

  • Выберите "http" в раскрывающемся меню "Профиль родителя".

  • В разделе "Настройки" установите "Переадресация перезаписи на все", "Согласование" или "Узлы", в зависимости от вашей конфигурации

Например:

o Выберите "Все", чтобы переписать любые HTTP 301, 302, 303, 305 или 307 перенаправления на HTTPS

o Выберите "Согласование", чтобы переписать переадресацию, когда компоненты URI пути и запроса запроса и перенаправление идентичны (кроме конечной косой черты)

o Выберите Node, чтобы переписать перенаправления, когда URI перенаправления содержит IP-адрес Node вместо имени хоста, и вы хотите, чтобы система изменила его на адрес виртуального сервера

  1. Нажмите "Готово".

Теперь вы должны связать новый профиль HTTP с виртуальным сервером ClientSSL.

Ответ 3

Попробуйте следующее:

# Trailing slash problem
RewriteCond    %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -d
RewriteRule    ^(.+[^/])$           https://<t:sitename/>$1/ [redirect,last]

Ответ 4

LoadModule rewrite_module                modules/mod_rewrite.so

убедитесь, что строка находится где-то в файле httpd.conf