Как переписать / прокси-сервер Apache URI для приложения, прослушивающего определенный порт / сервер?

Говорят, что Apache mod_rewrite - это швейцарский армейский нож для манипулирования URL, но может ли он это сделать?

Допустим, я хочу добавить новое приложение в мой веб-сервер Apache, где единственным настраиваемым параметром приложения является номер порта.

Я хочу использовать и выдавать URL формы "http://hostname.example.com/app" скорее, чем "http://hostname.example.com:8080Msgstr "Это гарантировало бы, что клиенты будут проходить через брандмауэр учреждения, и это, как правило, аккуратнее.

Мое приложение включает абсолютные URI в php, javascript и css, поэтому я хочу добавить свой собственный корневой каталог к URI во внутренних ссылках приложений. У меня нет доступа к записям DNS, поэтому я не могу создать еще один виртуальный сервер на основе имен.

Используя модули Apache mod_rewrite и mod_proxy, я могу прозрачно перенаправить клиента на правильную домашнюю страницу приложения. Но ссылки на этой домашней странице не указывают клиенту на ссылки относительно нового базового URL.

Итак, как лучше всего передать запрос приложению, которое прослушивает определенный порт?

Например, если бы у меня было приложение, прослушивающее порт 8080, я мог бы добавить это в мою конфигурацию Apache: -

<VirtualHost *:80>
    SSLProxyEngine On
    ServerName myhost.example.com
    RewriteEngine On
    UseCanonicalName On
    ProxyVia On
    <Location "/application">
        RewriteRule ^/application/?(.*) http://localhost:8080/$1 [P,L]
    </Location>
</VirtualHost>

Это будет хорошо работать, если приложение не использует абсолютные URL, но это так. Что мне нужно сделать, это переписать URL-адреса, которые возвращаются css, javascript и php приложения.

Я посмотрел на документацию ProxyPass и ReverseProxyPass, но я не думаю, что они будут работать ..?

Я также сталкивался с Ником Кьюmod_proxy_html, но это не входит в стандартный дистрибутив Apache, и веб-сервер моего учреждения, кажется, годен без него нормально. За исключением обхода вручную (или с использованием выражения типа grep -r | sed) через исходный код приложения, или используя это стороннее дополнение, есть ли другие способы сделать это?

Могу ли я использовать некоторые внутренние переменные сервера в правиле mod_rewrite? Например, правило перезаписи на основе «HTTP_REFERER»?