包含百分号(%)的IIS反向代理重新编码URL

Jos*_*ant 5 iis reverse-proxy urlencode url-rewrite-module arr

我正在尝试使用IIS 7.5,应用程序请求路由 3.0(ARR)和URL重写 2.0 为Jenkins设置反向代理。

我的代理服务器大多数都在工作,但是遇到包含百分号(%)的URL的问题。

无论我如何尝试,代理都坚持对重写的URL中的百分号进行解码或重新编码。

这就是我想要重写URL的方式:

http://my.proxy/a%2Fb -> http://my.host:8080/a%2Fb
Run Code Online (Sandbox Code Playgroud)

这是实际重写URL的方式:

http://my.proxy/a%2Fb -> http://my.host:8080/a/b
- or -
http://my.proxy/a%2Fb -> http://my.host:8080/a%252Fb
Run Code Online (Sandbox Code Playgroud)

如何获得IIS \ ARR \ Rewrite来停止对重写的URL进行重新编码?

我尝试过的事情:

  1. 普通的反向代理(将URL重写为http://my.host:8080/a/b):

    <rule name="ReverseProxyInboundRule1" stopProcessing="true"> <match url="(.*)" ignoreCase="true" /> <action type="Rewrite" url="http://my.host:8080/{R:1}" /> </rule>

  2. 使用UNENCODED_URL服务器变量(将URL重写为http://my.host:8080/a%252Fb):

    <rule name="ReverseProxyInboundRule1" stopProcessing="true"> <match url="(.*)" ignoreCase="false" /> <conditions logicalGrouping="MatchAll"> <add input="{UNENCODED_URL}" pattern="/(.*)" /> </conditions> <action type="Rewrite" url="http://my.host:8080/{C:1}" /> </rule>

  3. 只需直接输入网址(作为测试-还将网址重写为http://my.host:8080/a%252Fb):

    <rule name="ReverseProxyInboundRule1" stopProcessing="true"> <match url="(.*)" ignoreCase="false" /> <action type="Rewrite" url="http://my.host:8080/a%2Fb" /> </rule>

  4. 所有的想法在斯科特Hanselman的优秀“ 实验中的古怪:允许百分比,尖括号,并在ASP.NET/IIS请求URL其他顽皮的事情

    1. <httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="*,:,&amp;,\" relaxedUrlToFileSystemMapping="true" />
    2. <security> <requestFiltering allowDoubleEscaping="true" /> </security>'

注意:当我的IIS反向代理与Jenkins的内置反向代理检查系统发生冲突时,我会遇到这种行为,该系统试图对这种形式的URL进行HTTP重定向。

小智 0

我曾认为使用带有 url 的代理包含 % 符号有问题,但之后我发现事实并非如此。代理 URL 太长的问题。

\n\n

我使用带有选项服务器端的数据表:true 和类型:GET。然后,当从代理 url 太长的服务器加载内容时,就会出现问题。我改进了 url 请求的大小,问题已得到解决。

\n\n
<system.webServer>\n    <security>\n        <requestFiltering>\n            <requestLimits maxQueryString="4000" maxUrl="2000" />\n        </requestFiltering>\n    </security>\n    <rewrite>...</rewrite>\n    ...\n</system.webServer>\n
Run Code Online (Sandbox Code Playgroud)\n\n

但请记住,允许长查询字符串和 url 存在安全风险,而且\xe2\x80\x99 是一个糟糕的设计。

\n