2012-10-15 31 views
10

我有接受參數的形式/ {參數}阿帕奇mod_proxy的URL編碼

也有是Apache2的該請求轉發到websevice REST服務

<VirtualHost *:9091> 
    AllowEncodedSlashes NoDecode 
    LogLevel debug 
    ProxyPass /webservice balancer://api/webservice 

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

參數可以包含編碼的字符,如%2F(/)

的問題是,再阿帕奇編碼這些字符,和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 

如果我直接請求web服務,Tomcat/Jetty會處理它查找和服務接收正確的參數。

回答

9

通過指定

ProxyPass /webservice balancer://api/webservice nocanon 
1

有一點題外話,因爲這不能解決用斜槓的問題,但如果其他人在同一問題上運行,因爲我有我會在這裏添加也無妨解決。

我有一個類似的問題,通過Apache代理傳遞時,url參數中的瑞典特殊字符(åäö)沒有正確處理。事實證明,Apache很好,但在接收的Tomcat實例中,AJP連接器缺少URIEncoding配置。

從我的tomcat的server.xml:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8080" URIEncoding="UTF-8"/>