asp.net – 无法使用URL重写出站规则来更改IIS响应代码

前端之家收集整理的这篇文章主要介绍了asp.net – 无法使用URL重写出站规则来更改IIS响应代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试设置一个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设置为自定义,默认情况下,IIS不会显示自定义错误在本地盒子上测试的页面

这是一个配置,这两个这样的配置。

<httpErrors errorMode="Custom">
        <error statusCode="403" subStatusCode="14" path="/errorpage.htm" responseMode="ExecuteURL" />
    </httpErrors>

测试完成后,您可以关闭errorMode =“Custom”。

猜你在找的asp.Net相关文章