【问题标题】:How to use ProxyPass to send a query parameter without encoding it?如何使用 ProxyPass 在不编码的情况下发送查询参数?
【发布时间】:2021-10-05 16:02:46
【问题描述】:

在我的 apache 配置中,我正在匹配某个 url 并尝试将其重定向到另一个位置。在大多数情况下,此配置是有效的。不是的部分是代理传递 url 上的查询参数。我所有的研究都将我引向了 RewriteRule,但这对我来说毫无意义,因为我完全丢弃了传入的 url,因为它在用于匹配 Location 块后并不重要。

<Location "/src">
     ProxyErrorOverride Off
     ProxyPass https://example.com/dst/v1234?user=me
     ProxyPassReverse https://example.com/dst/v1234?user=me
     Header set Cache-Control "max-age=604800, public"
</Location

当我测试时,我可以看到以下内容:

应用服务器不知道如何解释%3f,即使那是问号 (?) 的 url 编码。应用服务器不在我的控制之下,我无法更改该代码来为我解码。如何让 Apache 发送问号 (?) 而不是 url 编码的变体?

【问题讨论】:

    标签: apache


    【解决方案1】:

    经过大量研究和另一个非常有用的 Stack Overflow 帖子。我找到了解决办法!

    ProxyPass /webservice balancer://api/webservice nocanon

    Apache mod_proxy url encoding

    答案是使用nocanon

    <Location "/src">
         ProxyErrorOverride Off
         ProxyPass https://example.com/dst/v1234?user=me nocanon
         ProxyPassReverse https://example.com/dst/v1234?user=me
         Header set Cache-Control "max-age=604800, public"
    </Location
    

    通常,mod_proxy 会规范化 ProxyPassed URL。但这可能与某些后端不兼容,尤其是那些使用 PATH_INFO 的后端。可选的 nocanon 关键字会抑制这一点并将 URL 路径“原始”传递给后端。请注意,此关键字可能会影响后端的安全性,因为它取消了代理提供的针对基于 URL 的攻击的正常有限保护。

    https://httpd.apache.org/docs/2.4/mod/mod_proxy.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多