IIS Url重写不适用于某些扩展名和字符

时间:2014-04-01 19:29:52

标签: url-rewriting iis-7.5

我正在使用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中本地提供这些文件扩展名,从而绕过重写规则。另外,我想除了“+”之外还有更多的字符会导致重写规则被忽略。

1 个答案:

答案 0 :(得分:1)

我也有这个问题。事实证明,IIS正试图提供帮助并阻止远程用户下载源代码,这正是我试图允许的内容!

修复是进入请求过滤并删除所有麻烦的条目,虽然我跳过它,只是把它放在web.config中:

<system.webServer>
  <security>
    <requestFiltering>
      <fileExtensions>
        <clear />
      </fileExtensions>
    </requestFiltering>
  </security>
</system.webServer>