Як я пересилаю запити до іншої URL-адреси, фактично не змінюючи URL-адресу в Apache?


0

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

Моя проблема полягає в тому, що у мене є така URL-адреса http://example.com/bar, але вона повинна насправді вказувати http://example.com/t/bar.

Іншими словами, URL-адреса повинна бути оброблена Tomcat, який отримує контекст програми "бар".

Проблема в тому, що я не зовсім впевнений, як скласти для цього правильне правило перезапису. Я спробував додати це до доступних / за замовчуванням сайтів

Перепишіть
Перепишіть ^ / бар (. *) / T / бар $ 1 [R]

Але це не зберігає URL-адресу, а натомість просто переспрямовує на URL Tomcat з /t/префіксом. Якщо я видаляю [R], я просто отримую 404.

Що належне RewriteRuleвирішити мою проблему?


1
Ви, напевно, отримаєте кращі відповіді на serverfault.com
MDMarra

Я не розумію питання. Ви говорите "але насправді це повинно вказувати на example.com/t/bar ", а потім ви говорите "Але це не зберігає URL-адресу, а натомість просто переспрямовує на URL Tomcat з префіксом / t /." Хочете змінити URL-адресу чи ні?
innaM

Манні, вибач за плутанину. Ні, я не хочу змінювати URL-адресу.
Кім Л

Відповіді:


3

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

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

'proxy | P' (примусовий проксі)

Цей прапор змушує частину заміни бути внутрішньо відправленою як запит проксі-сервера і негайно (перезапис обробки припиняється тут) через проксі-модуль. Ви повинні переконатися, що рядок підстановки є дійсним URI (як правило, починаючи з http: // імені хоста ), яким можна обробляти проксі-модуль Apache. Якщо ні, ви отримаєте помилку від проксі-модуля. Використовуйте цей прапор для досягнення більш потужної реалізації директиви ProxyPass, щоб відобразити віддалений вміст у просторі імен локального сервера.

Примітка: mod_proxy повинен бути включений , щоб використовувати цей прапор.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.