@relgames
Java Developer

Apache mod_proxy url encoding?

Есть веб-сервис, который принимает параметры в URL, вида service/{parameter}

Есть Apache2, который проксирует запросы к сервису
<VirtualHost *:9091>
  AllowEncodedSlashes NoDecode
  LogLevel debug
  ProxyPass /webservice balancer://api/webservice

  <Proxy balancer://api>
     BalancerMember http://localhost:8030
  </Proxy>
</VirtualHost>



В параметрах могут передаваться всякие символы закодированные, типа %2f, что означает слэш /

Проблема в том, что Apache кодирует слэш второй раз, и получается %252f


[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 localhost:8030/Interface%20GigabitEthernet1%252F0%252F2%20Utilization


Если AllowEncodedSlashes поставить в On, то он слэш раскодирует и вставит в URL, что не верно. Как заставить Apache передавать %2f как есть?
  • Вопрос задан
  • 4121 просмотр
Решения вопроса 1
@relgames Автор вопроса
Java Developer
Кому интересно, решил так:
AllowEncodedSlashes NoDecode
ProxyPass /webservice balancer://api/webservice nocanon
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
iandriyanov
@iandriyanov
issues.apache.org/bugzilla/show_bug.cgi?id=34602#c27

RewriteRule ^(.*)$   index.php?show=$1	[B,L]
In the given example, a request to http://example.com/C++ (or
http://example.com/C%2B%2B) would be redirected internally to
index.php?show=C%2B%2B instead of index.php?show=C++


т.е. передавать как есть!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы