mod_rewrite для решения проблемы с косой чертой в конце

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

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

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

RewriteEngine на RewriteRule ^/lawson/портал(.*) /lawson/portal/$1

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

Среди многих других вещей...Что я упускаю из виду?

Это было полезно?

Решение

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

Другие советы

Исправлено!

СОЛ6912:Настройка профиля HTTP для перезаписи URL-адресов таким образом, чтобы перенаправления с HTTP-сервера указывали протокол HTTPS


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

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

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

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

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

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

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

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

· Когда клиент получает ответ о перенаправлении HTTP 302, он отправляет новый запрос виртуальному серверу LTM BIG-IP, который указывает 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.

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top