我正在使用IIS 7.5和Url Rewrite模块。这是我的规则。
<rule name="stash.domain.com" stopProcessing="true">
<match url="(.*)" />
<action type="Rewrite" url="http://192.168.5.9:8080/{R:1}" logRewrittenUrl="true" />
<conditions>
<add input="{HTTP_HOST}" pattern="^stash.domain.com$" />
</conditions>
</rule>
一切都按预期工作,除非网址包含“.cs”的扩展名,或者网址中包含“+”符号。
例如,这些不起作用
http://stash.domain.com/projects/MDX/repos/medxchange.library/browse/Src/MedXChange.Api/CoreServiceUrls.cs
http://stash.domain.com/projects/MDX/repos/medxchange.library/browse/Src/MedXChange.Api/CoreService+Urls
我从IIS那里得到了以下这些网址的响应。
404 - File or directory not found.
但是,这些都可行,但是,代理服务器将返回一个很好的“找不到文件”,它告诉我规则已经处理并正确转发请求。
http://stash.domain.com/projects/MDX/repos/medxchange.library/browse/Src/MedXChange.Api/CoreServiceUrls
我怀疑IIS有一些顶级过滤功能可以阻止某些文件扩展名被提供,或者尝试在IIS中本地提供这些文件扩展名,从而绕过重写规则。另外,我想除了“+”之外还有更多的字符会导致重写规则被忽略。
答案 0 :(得分:1)
我也有这个问题。事实证明,IIS正试图提供帮助并阻止远程用户下载源代码,这正是我试图允许的内容!
修复是进入请求过滤并删除所有麻烦的条目,虽然我跳过它,只是把它放在web.config中:
<system.webServer>
<security>
<requestFiltering>
<fileExtensions>
<clear />
</fileExtensions>
</requestFiltering>
</security>
</system.webServer>