mod_rewrite для проблемы с косой чертой - PullRequest
10 голосов
/ 01 октября 2008

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

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

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

Перезаписать двигатель на RewriteRule ^ / lawons / portal (. *) / Lawons / portal / $ 1

я тоже пробовал RewriteRule ^ / lawons / portal $ / lawons / portal /

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

Ответы [ 4 ]

6 голосов
/ 01 октября 2008

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

5 голосов
/ 02 октября 2008

Исправлено!

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


Обновлено: 07.08.07, 00:00

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

Если запрошенный URI не включает в себя завершающую косую черту (прямую косую черту, такую ​​как /, в конце URI), некоторые веб-серверы генерируют любезное перенаправление. Без завершающей косой черты веб-сервер сначала будет обрабатывать ресурс, указанный в URI, как файл. Если файл не может быть найден, веб-сервер может выполнить поиск каталога с тем же именем и, если он найден, отправить ответ 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. Для этого выполните следующую процедуру:

  1. Войдите в утилиту конфигурации.

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

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

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

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

  6. Выберите http в раскрывающемся меню Родительский профиль.

  7. В разделе «Настройки» установите «Перезаписать перезапись» на «Все», «Соответствие» или «Узлы» в зависимости от конфигурации

Например:

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

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

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

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

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

1 голос
/ 17 декабря 2010

Попробуйте это:

# Trailing slash problem
RewriteCond    %{DOCUMENT_ROOT}%{REQUEST_FILENAME} -d
RewriteRule    ^(.+[^/])$           https://<t:sitename/>$1/ [redirect,last]
0 голосов
/ 01 октября 2008
LoadModule rewrite_module                modules/mod_rewrite.so

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...