2014-04-01 48 views
1

我正在使用IIS 7.5与Url重写模块。这是我的规则。IIS Url重写不适用于某些扩展名和字符

<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> 

一切正常,但如果URL包含和“的.cs”的延伸,或者如果‘+’号是在URL中的任意位置。

例如,这些不工作

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中nativelly为他们服务,绕过重写规则。另外,我想除了“+”之外还有更多的字符会导致重写规则被忽略。

回答

1

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

定盘进入请求筛选并删除所有麻烦的条目,虽然我跳过的,只是把这个在web.config:

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

您可能还需要设置<的httpRuntime requestPathInvalidCharacters = “”/>以及,如果您的网址中有任何奇怪的字符,如&,*或:,IIS会将它们过滤为“潜在危险”。 –