我有一个gitlab ce安装在局域网内的VM Ubuntu-GLS上。为了给予它可以从互联网访问,我在我的主Web服务器上使用了IIS ARR URL重写模块。Gitlab通过API从仓库获取一些文件需要用正斜杠分割目录,编码为% 2F。如果我向gitlab API发送如下请求:curl --header "PRIVATE-TOKEN: <myPrivToken>" "http://gitlab.mysite.com/api/v4/projects/8/repository/files/DemoAM%2F.project?ref=master"
其中DemoAM是根仓库中的文件夹。ARR替换了正斜杠上的% 2F,gitlab得到如下请求(我隐藏了gitlab日志中的一些不重要的字段):
{
"status": 404,
"method": "GET",
"path": "/api/v4/projects/8/repository/files/DemoAM/.project",
"host": "Ubuntu-GLS",
"remote_ip": "192.168.0.1:58496, 192.168.0.102, 127.0.0.1"....
其中用/替换了%2F
但如果我直接发送请求到本地VM/ like:curl --header "PRIVATE-TOKEN: <myPrivToken>" "http://Ubuntu-GLS/api/v4/projects/8/repository/files/DemoAM%2F.project?ref=master"
个
gitlab获得正确的请求,例如:
{
"status": 200,
"method": "GET",
"path": "/api/v4/projects/8/repository/files/DemoAM%2F.project",
"host": "Ubuntu-GLS",
"remote_ip": "192.168.0.102, 127.0.0.1"....
其中,如果%2F按原样提供,并且正确
我在rewrite urls with slashes ( %2F ) in query string中找到了一个非常相似的问题,但是我不能使用它的答案,因为我不能修改gitlab请求规则。另外,我尝试将useOriginalURLEncoding
设置为false,但没有结果,这是这里推荐的:是的。
那么,有没有其他方法可以解决这个问题?我希望得到的解决方案是,rest string {R:1}将按原样传递throw,而不替换编码符号
我使用的规则是这样的:
<rule name="ReverseProxyInboundRule1" enabled="true" stopProcessing="true">
<match url="(.*)" />
<conditions logicalGrouping="MatchAny">
<add input="{CACHE_URL}" pattern="^(https?)://gitlab\.mysite\.com" />
</conditions>
<action type="Rewrite" url="{C:1}://Ubuntu-GLS/{R:1}" appendQueryString="true" />
<serverVariables>
<set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
<set name="HTTP_ACCEPT_ENCODING" value="" />
</serverVariables>
</rule>
<outboundRules>
<rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1" enabled="true">
<match filterByTags="A, Form, Img" pattern="^http(s)?://Ubuntu-GLS/(.*)" />
<action type="Rewrite" value="http{R:1}://gitlab.mysite.com/{R:2}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
</preCondition>
<preCondition name="NeedsRestoringAcceptEncoding">
<add input="{HTTP_X_ORIGINAL_ACCEPT_ENCODING}" pattern=".*" />
</preCondition>
</preConditions>
</outboundRules>
1条答案
按热度按时间dxxyhpgq1#
变更
至
并且还改变请求过滤以允许双重转义。
参考
https://blogs.iis.net/iisteam/url-rewrite-v2-1