我正在使用IIS7和Application Request Routing扩展来充当在Apache上运行的Subversion的反向代理。
代理工作正常,我能够探索服务器,甚至执行“签出”。但是,我无法浏览通常被ASP.NET禁止的文件 - 例如.cs,.csproj等。 ASP.NET不关心的文件 - 例如.txt - 很好。
我尝试编辑全局web.config以删除这些文件的Forbidden处理程序映射,但它似乎没有什么区别。有没有办法允许IIS7中的URL重写模块工作,同时允许呈现所有文件扩展名?
答案 0 :(得分:16)
IIS7有一个applicationHost.config文件,其中包含一个限制文件扩展名的安全部分:
<requestFiltering>
<fileExtensions allowUnlisted="true" applyToWebDAV="true">
<add fileExtension=".cs" allowed="false" />
<add fileExtension=".csproj" allowed="false" />
<add fileExtension=".vb" allowed="false" />
<add fileExtension=".vbproj" allowed="false" />
....
</fileExtensions>
更多信息:
http://learn.iis.net/page.aspx/143/how-to-use-request-filtering/
我在网站的web.config中添加了一个类似的部分,并使用<clear />
节点删除了所有扩展名。现在我可以提供.cs,.csproj文件和其他文件,但我无法提供.config文件。
编辑:删除hiddenSection节点也会对web.config文件进行更正。这是我的本地web.config文件:
<system.webServer>
<security>
<requestFiltering>
<fileExtensions allowUnlisted="true" applyToWebDAV="true">
<clear />
</fileExtensions>
<verbs allowUnlisted="true" applyToWebDAV="true" />
<hiddenSegments applyToWebDAV="true">
<clear />
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
答案 1 :(得分:4)
我使用web.config看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="ReverseProxyInboundRule1" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{CACHE_URL}" pattern="^(https?)://" />
</conditions>
<action type="Rewrite" url="{C:1}://localhost:8080/{R:1}" />
</rule>
</rules>
<outboundRules>
<rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
<match filterByTags="A, Form, Img" pattern="^http(s)?://localhost:8080/(.*)" />
<action type="Rewrite" value="http{R:1}://svn.mysite.com/{R:2}" />
</rule>
<preConditions>
<preCondition name="ResponseIsHtml1">
<add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
<add input="{RESPONSE_CONTENT_ENCODING}" pattern="[^(gzip)]" />
</preCondition>
</preConditions>
</outboundRules>
</rewrite>
<security>
<requestFiltering>
<fileExtensions allowUnlisted="true" applyToWebDAV="true">
<clear />
</fileExtensions>
<verbs allowUnlisted="true" applyToWebDAV="true" />
<hiddenSegments applyToWebDAV="true">
<clear />
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
</configuration>
答案 2 :(得分:1)
除了 Paul Stovell 的回答之外,我还建议激活双重转义。我在检索文件名中包含“+”字符的文件时遇到错误。双重转义消除了这个问题:
<configuration>
<system.webServer>
<rewrite>
<rules>
<rule name="SVNIn" stopProcessing="false">
<match url="(.*)" />
<action type="Rewrite" url="http://localhost:8082/svn/{R:1}" />
</rule>
</rules>
</rewrite>
<security>
<requestFiltering allowDoubleEscaping="true">
<fileExtensions allowUnlisted="true" applyToWebDAV="true">
<clear />
</fileExtensions>
<verbs allowUnlisted="true" applyToWebDAV="true" />
<hiddenSegments applyToWebDAV="true">
<clear />
</hiddenSegments>
</requestFiltering>
</security>
</system.webServer>
</configuration>