我有asp.net自定义错误,但它们运行良好:
<customErrors mode="RemoteOnly" defaultRedirect="~/Error/Index/500">
<error statusCode="403" redirect="~/Error/Index/403" />
<error statusCode="404" redirect="~/Error/Index/404" />
<error statusCode="500" redirect="~/Error/Index/500" />
<error statusCode="502" redirect="~/Error/Index/502" />
<error statusCode="503" redirect="~/Error/Index/503" />
<error statusCode="504" redirect="~/Error/Index/504" />
</customErrors>
此外,已成功安装ssl证书,并且可以从http和https访问我的网站。
当我得到要求SSL的要求时出现了问题。该站点的http链接已分发给1000个用户。因此,我们需要将任何流向http地址的流量优雅地重定向到https主页。
我试图让重定向工作的任何解决方案都会破坏自定义错误。
我有这个测试网址生成错误,以便在〜/ error / test中测试我的自定义错误页面。它使用mvc布局显示我的自定义错误页面。
无论我如何设置,一旦我在IIS中的SSL设置中打开需要SSL,如果我打开任何http自定义错误(以便启用403.4重定向),它甚至不会尝试显示我的自定义500页。它显示了通用的http 500页面。
我希望403.4在http级别使用重定向处理,500使用我的自定义错误页面在asp.net级别处理。顺便说一下,这不是一个页面,而是一个使用会话变量中的.net异常的控制器。
我该如何做到这一点?
答案 0 :(得分:0)
问题似乎是IIS与#34;需要SSL&#34;之间的脱节。功能和现有链接 - 在IIS中所做的一切都是因为它拒绝不通过HTTP发出的请求,它不会执行任何重定向。
403.4是custom IIS sub-status code,表示&#34; SSL必需&#34; - 如果您申请没有SSL的网站,则会收到该错误 - 即它会阻止所有未在HTTPS下发出的请求。
发出的实际响应是标准的403 - 禁止,没有涉及重定向,也没有告诉浏览器它应该通过SSL请求网站的任何内容 - 这些都在HTML中返回,并希望用户理解。在将请求传递给您的应用程序进行处理之前,IIS会发出错误,这就是您没有看到任何自定义错误的原因 - 无论哪种方式,如果您看到错误页面,它仍然是403页。
因此,如果您需要支持HTTP下的初始请求,则需要设置某种形式的重定向。
有几种方法可以做到这一点:
使用UrlRewrite模块 - 但请注意,这可能是单独的安装,具体取决于您的托管服务器。安装完成后,您可以执行以下操作:
<system.webServer>
<rewrite>
<rules>
<rule name="RequireSsl" stopProcessing="true">
<match url="(.*)" />
<conditions>
<add input="{HTTPS}" pattern="ON" negate="true" />
</conditions>
<action type="Redirect" url="https://{HTTP_HOST}/{R:1}" />
</rule>
</rules>
</rewrite>
</system.webServer>
这将确保对服务器的所有请求(静态文件以及MVC路由)都被重定向到SSL。
另一个选项是[RequireHttps]
过滤器属性,可以添加到控制器,操作或全局过滤器集合中,但这主要只影响MVC路由 - 静态文件仍然可以在没有HTTPS的情况下提供。
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
[...]
// Add RequireHttps to any existing filters to force all routes to SSL
filters.Add(new RequireHttpsAttribute());
}
请注意,这两者都只会导致客户端对GET请求执行重定向,大多数客户端会忽略301/302的POST请求,因为您不应该重新提交表单。
[RequireHttps]
选项仅发出GET请求的重定向,POST请求将返回无效操作异常:&#34;必须使用HTTPS&#34;。