Как пересылать запросы на другой 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.
'proxy | P' (принудительный прокси)
Этот флаг заставляет замещающую часть внутренне отправляться как запрос прокси-сервера и немедленно (обработка перезаписи останавливается здесь) передаваться через прокси-модуль. Вы должны убедиться, что строка подстановки является допустимым URI (обычно начинающимся с http://hostname/), который может обрабатываться прокси-модулем Apache. Если нет, вы получите ошибку от прокси-модуля. Используйте этот флаг для достижения более мощной реализации директивы ProxyPass, чтобы отобразить удаленный контент в пространство имен локального сервера.
Примечание: mod_proxy должен быть включен для использования этого флага.