首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法使用URL重写出站规则更改IIS响应代码

无法使用URL重写出站规则更改IIS响应代码
EN

Stack Overflow用户
提问于 2014-08-30 12:34:18
回答 4查看 8.7K关注 0票数 18

我正在尝试设置IIS URL重写规则,以匹配由于禁用目录浏览时有人试图浏览到某个目录而导致的403个响应。然后,我想将它们重定向到我为404定义的常见ASP.NET自定义错误页面。

这是我目前所拥有的:

代码语言:javascript
复制
<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>

我的假设是它需要是一个出站规则,并且我需要重写状态代码和添加location响应头,尽管后者对于原始的403响应无论如何都不存在。

目前的行为是..。没什么。无论我做了多少调整,我仍然可以看到403。有什么想法吗?

顺便说一句,没有,网站上没有任何合法的403会因此而被吞噬。我还可以为可能导致满足条件的每条路径创建入站规则,但这不是非常可伸缩的。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-08-31 08:10:39

URL重写可以处理几乎所有内容,但不能处理HTTP状态代码,因为它位于响应头之外。所以不幸的是,URL重写不能对此做任何事情,或者至少不是我所能找到的。我曾多次想做类似的事情。注意,您可以使用{RESPONSE_STATUS}检查具有条件的状态,但不能对其进行更新。

此外,您可以使用subStatusCode将错误范围限定为仅403.14,并且仅为了测试,请确保进行现成测试或将errorMode设置为“自定义”,因为在默认情况下,在本地计算机上测试时,IIS不会显示自定义错误页。

这是一个示例配置,可以同时完成这两个任务。

代码语言:javascript
复制
    <httpErrors errorMode="Custom">
        <error statusCode="403" subStatusCode="14" path="/errorpage.htm" responseMode="ExecuteURL" />
    </httpErrors>
票数 10
EN

Stack Overflow用户

发布于 2014-08-31 07:13:53

我不确定这是否有帮助,因为它不是重写规则,但这将强制403使用web.config的httpErrors部分转到错误页面:

代码语言:javascript
复制
<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>
票数 4
EN

Stack Overflow用户

发布于 2014-08-30 21:28:32

我记得,当我们遇到这个问题时,我们去域名注册商那里注册我们的域名,并把SharePoint记录转发出去(我想它们是CNAME记录)。这是一片混乱,让一切保持同步,但这是我们唯一能让它正常工作的方法。IIS中的HTTP和URL重写至少在某些情况下不适用于SharePoint。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25579048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档