![](/img/trans.png)
[英]IIS URL Rewrite for modifying query parameter on outbound redirect response
[英]Can't change IIS response code with URL Rewrite outbound rule
我正在尝试设置IIS URL重写规则以匹配403响应,因为有人在禁用目录浏览时尝试浏览目录。 我想然后将它们重定向到我为404定义的通常的ASP.NET自定义错误页面。
这就是我目前所拥有的:
<outboundRules>
<!-- By default, browsing a directory with no default resource will return 403 -->
<rule name="Directory browsing location">
<match serverVariable="RESPONSE_LOCATION" pattern="(.*)" />
<conditions>
<add input="{RESPONSE_STATUS}" pattern="^403" />
</conditions>
<action type="Rewrite" value="/Error/PageNotFound?aspxerrorpath={PATH_INFO}"/>
</rule>
<rule name="Directory browsing status code" patternSyntax="ExactMatch">
<match serverVariable="RESPONSE_STATUS" pattern="403" />
<action type="Rewrite" value="302" />
</rule>
</outboundRules>
我的假设是它需要是一个出站规则,我需要重写状态代码并添加位置响应头,尽管后者在最初的403响应中不会存在。
目前的行为是......没有。 无论我做多少调整,我仍然会看到403s。 有什么想法吗?
顺便说一下,不,网站上没有任何合法的403可以被吞下。 我还可以为可能导致满足条件的每个路径创建入站规则,但这不是很可扩展。
URL Rewrite几乎可以处理所有内容,但不包含HTTP状态代码,因为它位于响应头之外。 所以很遗憾,URL Rewrite对此无能为力,或者至少不是我曾经能找到的。 我想多次做类似的事情。 请注意,您可以使用{RESPONSE_STATUS}检查条件状态,但无法更新。
@RyanCEI的回复是我推荐的。 要添加它,您可以使用subStatusCode将错误范围限定为403.14,并且仅用于测试,请确保要么禁用测试或将errorMode设置为Custom,因为默认情况下IIS不会显示自定义错误在本地方框上测试时的页面。
这是一个示例配置,可以完成这两个任务。
<httpErrors errorMode="Custom">
<error statusCode="403" subStatusCode="14" path="/errorpage.htm" responseMode="ExecuteURL" />
</httpErrors>
测试后,您可以关闭errorMode =“Custom”。
不确定这是否有帮助,因为它不是重写规则,但这将使用web.config的httpErrors部分强制403到您的错误页面:
<configuration>
<system.web>
<compilation debug="false" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
<customErrors defaultRedirect="~/errorpage.html" mode="On">
</customErrors>
</system.web>
<system.webServer>
<httpErrors>
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" prefixLanguageFilePath="" path="/errorpage.html" responseMode="ExecuteURL" />
<remove statusCode="403" subStatusCode="-1" />
<error statusCode="403" prefixLanguageFilePath="" path="/errorpage.html" responseMode="ExecuteURL" />
</httpErrors>
<defaultDocument>
<files>
<remove value="default.aspx" />
<remove value="iisstart.htm" />
<remove value="index.htm" />
<remove value="Default.asp" />
<remove value="Default.htm" />
</files>
</defaultDocument>
</system.webServer>
</configuration>
我记得在我们遇到这个问题的时候,我们进入了域名注册机构的域名,并将DNS记录转发给我们(我认为它们是CNAME记录)。 这是一个混乱,保持一切同步,但这是我们能够让它工作的唯一方式。 IIS中的HTTP和URL重写在某些情况下至少在SharePoint中不起作用。
我也没有多少运气 - 但我怀疑在这个回应中可能会有一丝暗示
http://forums.iis.net/t/1200342.aspx?URL+rewrite+rule+to+capture+response+status+503+and+redirect
引用他们的回答:“然而,在503个案例中,请求永远不会进入工作进程,503个回复直接来自http.sys。”
我怀疑403s可能永远不会进入IIS进程而无法重写。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.