Они говорят, что mod_rewrite Apache - это швейцарский армейский нож для манипулирования 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?
application/
, если они начинаются с/
(они не могут быть исправлены прокси, потому что, например, запрос/img/abc
неоднозначен без контекста:application/img/abc
или действительно/img/abc
). Не можете ли вы исправить приложение, чтобы оно использовало только относительные ссылки? - person eudoxos   schedule 24.09.2011