URL重写代理后面的ASP.NET/MVC 5自定义IIS错误页面

时间:2018-08-23 11:34:13

标签: asp.net asp.net-mvc iis web-config

我已将我的应用程序配置为通过web.config中的以下条目显示自定义错误页面:

<system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
       <clear />
       <error
         statusCode="401"
         path="/Static/Unauthorized.html"
         responseMode="ExecuteURL" />
       <error
         statusCode="404"
         path="/Static/NotFound.html"
         responseMode="ExecuteURL" />
       <error
         statusCode="500"
         path="/Static/Internal.html"
         responseMode="ExecuteURL" />
    </httpErrors>
</system.webServer>

这很好。但是,在我的生产环境中,可以通过附加路径的代理来访问此应用程序:

Locally: https://example.org/Controller/Action
Remote: https://proxy.example.org/application-name/Controller/Action

因此现在错误页面不再可用,因为该路径指向根目录。

我尝试过/考虑过的事情:

  • 在应用程序中处理此问题的常用方法:在路径前面加上“〜”-不起作用(每次显示空白403页),我猜是因为错误处理是由IIS和不是应用本身吗?
  • 在Web.config中包含“ / application-name /”-不可行,因为某些用户的路径不同
  • 使用[ErrorHandling]属性而不是web.config-据我了解,该属性仅对抛出的异常进行过滤,而对于一般的状态代码不进行过滤(这应该是一些直接的东西)对于仅使用return HttpStatusCodeResult()方法的相当大的旧版代码库)
  • 在IIS服务器的根目录中放置常规错误页面-不可行,因为每个子应用程序都必须具有不同的错误页面

如何让IIS根据应用程序的根URL解析错误页面的动态路径?

PS:我知道该方法会丢弃错误代码并返回带有代码200的错误页面。尽管它与标准不符,但在我的情况下还可以,甚至适度有用,因为代理不以这种方式参与错误处理。

0 个答案:

没有答案