Как пересылать запросы на другой URL-адрес без фактического изменения URL-адреса в Apache?

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

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

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

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

Переписать Engine на
RewriteRule ^/bar(.*) / T /bar$1 [R]

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

Что является правильным RewriteRule решить мою проблему?

1 ответ

Решение

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

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

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

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

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

Другие вопросы по тегам