我正在尝试使用 IIS 7.5、应用程序请求路由3.0 (ARR) 和URL Rewrite 2.0为Jenkins设置反向代理。
我的代理大部分都在工作,但是遇到了包含百分号 (%) 的 URL 的问题。
无论我尝试什么,代理都坚持对重写后的 URL 中的百分号进行解码或重新编码。
这就是我希望重写 URL 的方式:
http://my.proxy/a%2Fb -> http://my.host:8080/a%2Fb
这就是 URL实际被重写的方式:
http://my.proxy/a%2Fb -> http://my.host:8080/a/b
- or -
http://my.proxy/a%2Fb -> http://my.host:8080/a%252Fb
如何让 IIS\ARR\Rewrite 停止重新编码我重写的 URL?
我尝试过的事情:
一个普通的反向代理(将 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>
使用
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>
只需直接输入 URL(作为测试 - 也将 URL 重写为
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>
Scott Hanselman 出色的“古怪实验:在 ASP.NET/IIS 请求 URL 中允许百分比、尖括号和其他顽皮的东西”中的所有想法
<httpRuntime requestValidationMode="2.0" requestPathInvalidCharacters="*,:,&,\" relaxedUrlToFileSystemMapping="true" />
<security> <requestFiltering allowDoubleEscaping="true" /> </security>'
注意:当我的 IIS 反向代理与Jenkins 的内置反向代理检查系统发生冲突时,我遇到了这种行为,该系统试图将 HTTP 重定向到此表单的 URL。