Ответ 1
Решено, указав
ProxyPass /webservice balancer://api/webservice nocanon
У меня есть служба REST, которая принимает параметры в форме /{parameter}
Также есть Apache2, который пересылает запросы в websevice
<VirtualHost *:9091>
AllowEncodedSlashes NoDecode
LogLevel debug
ProxyPass /webservice balancer://api/webservice
<Proxy balancer://api>
BalancerMember http://localhost:8030
</Proxy>
</VirtualHost>
Параметры могут содержать закодированные символы, такие как% 2f (/)
Проблема заключается в том, что Apache снова кодирует эти символы, а Webservice получает% 252F вместо% 2F
[Mon Oct 15 13:59:24 2012] [debug] mod_proxy_balancer.c(46): proxy: BALANCER: canonicalising URL //api/webservice/Interface GigabitEthernet1%2F0%2F2
[Mon Oct 15 13:59:24 2012] [debug] mod_proxy_balancer.c(581): proxy: BALANCER (balancer://api) worker (http://localhost:8030) rewritten to http://localhost:8030/Interface%20GigabitEthernet1%252F0%252F2%20Utilization
Если я запрашиваю webservice напрямую, Tomcat/Jetty обрабатывает его, и поиск получает правильный параметр.
Решено, указав
ProxyPass /webservice balancer://api/webservice nocanon
Немного от темы, так как это не решает проблему со слэшами, но я все равно добавлю ее сюда, если кто-то еще столкнется с той же проблемой, что и у меня.
У меня была аналогичная проблема с тем, что специальные символы (åäö) в параметрах url не обрабатывались корректно при передаче через прокси-сервер apache. Оказалось, что apache работает нормально, но в приемном экземпляре tomcat в AJP-коннекторе отсутствует конфигурация URIEncoding.
Из моего tomcat server.xml:
<Connector port="8009" protocol="AJP/1.3" redirectPort="8080" URIEncoding="UTF-8"/>