Говорят, что Apache mod_rewrite - это швейцарский армейский нож для манипулирования URL, но может ли он это сделать?
Допустим, я хочу добавить новое приложение на мой веб-сервер Apache, где единственным настраиваемым параметром приложения является номер порта.
Я хочу использовать и выдавать URL-адреса в форме "http://hostname.example.com/app", а не" http://hostname.example.com:8080".. Это будет гарантировать, что клиенты будут проходить через брандмауэр учреждения, и, как правило, он более аккуратный.
Мое приложение содержит абсолютные 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»?