У меня работает Apache в домене, например http://example.com . У меня также работает Tomcat на моем сервере, и я перенаправил все запросы, сделанные на http://example.com/t/ в Tomcat, а все остальные URL-адреса обслуживаются Apache напрямую.

Моя проблема в том, что у меня есть URL-адрес, такой как http://example.com/bar , но на самом деле он должен указывать на http://example.com/t/bar .

Другими словами, URL должен обрабатываться Tomcat, который получает контекстную панель приложения.

Проблема в том, что я не совсем уверен, как сделать правильное правило переписывания для этого. Я пытался добавить это на сайты доступны / по умолчанию

RewriteEngine on
RewriteRule ^/bar(.*) /t/bar$1 [R]

Но это не сохраняет URL-адрес, а просто перенаправляет на URL-адрес Tomcat с префиксом /t/ . Если я уберу [R] , я получу 404.

Что такое RewriteRule для решения моей проблемы?

1 ответ1

3

Вы должны использовать опцию 'P' (прокси) в правиле mod_rewrite, чтобы сделать это внутренне для сервера. Вам также необходимо включить mod_proxy.

из документов mod_rewrite:

'proxy | P' (принудительный прокси)

Этот флаг заставляет замещающую часть внутренне отправляться как запрос прокси-сервера и немедленно (обработка перезаписи останавливается здесь) передаваться через прокси-модуль. Вы должны убедиться, что строка подстановки является допустимым URI (обычно начинающимся с http://hostname), который может обрабатываться прокси-модулем Apache. Если нет, вы получите ошибку от прокси-модуля. Используйте этот флаг, чтобы добиться более мощной реализации директивы ProxyPass, чтобы отобразить удаленный контент в пространство имен локального сервера.

Примечание: mod_proxy должен быть включен для использования этого флага.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .