ASP.NET服务的app_offline.htm文件返回http状态503.这是大多数情况下的正确行为。但是,在请求特定URL的情况下(例如, https://www.mywebsite.com/monitor),我想将返回的http状态更改为200,同时在所有其他情况下仍返回http状态503。这可能吗?
我想这样做的原因是,无论何时我们在我们的网站上进行定期维护,我们都使用app_offline.htm文件,但我们不希望我们的正常运行时间监控服务(Pingdom.com)在我们的计划维护期间报告停机时间。
我认为这必须在IIS级别,因为app_offline.htm在请求处理周期中很早就得到了服务。
注意 App_Offline
只是将ASP.NET部分关闭,它与IIS站点无关。所有nonASP.NET请求类似.htm-将通过正常的IIS管道。
话虽这么说,一个 HTTP 503
是不可用的服务错误。该 App_Offline.htm
使网站部分脱机,所有ASP.NET请求获得一个正常和正确 503
站点离线时的响应。
使用HttpModule绕过它,或者ASP.NET管道中的任何代码都不是有效的解决方案。
因为你已经创建/复制了 App_Offline.htm
在维护期间在您的IIS根目录中,我建议添加 maintenance.htm
作为您的默认文件 /monitor
文件夹或IIS站点并创建/复制a maintenance.htm
在维护期间将文件放入其中:然后,无论ASP.NET站点是否脱机,都将访问默认页面。
如果您的探测器正在呼叫 http://servername/monitor/
如果没有指定任何页面,它将起作用。
你只需要删除它 - 就像删除你的那样 App_Offline
- 维修后。
注意 App_Offline
只是将ASP.NET部分关闭,它与IIS站点无关。所有nonASP.NET请求类似.htm-将通过正常的IIS管道。
话虽这么说,一个 HTTP 503
是不可用的服务错误。该 App_Offline.htm
使网站部分脱机,所有ASP.NET请求获得一个正常和正确 503
站点离线时的响应。
使用HttpModule绕过它,或者ASP.NET管道中的任何代码都不是有效的解决方案。
因为你已经创建/复制了 App_Offline.htm
在维护期间在您的IIS根目录中,我建议添加 maintenance.htm
作为您的默认文件 /monitor
文件夹或IIS站点并创建/复制a maintenance.htm
在维护期间将文件放入其中:然后,无论ASP.NET站点是否脱机,都将访问默认页面。
如果您的探测器正在呼叫 http://servername/monitor/
如果没有指定任何页面,它将起作用。
你只需要删除它 - 就像删除你的那样 App_Offline
- 维修后。
据我所知,app_offline.htm逻辑在ASP.NET 2.0模块中处理,但在任何应用程序加载开始之前(这当然是app_offline.htm * g *背后的想法)。
我建议:
- 添加名为的虚拟目录
monitor
到您的(已禁用)网站的根目录并将其分配给某个IIS可读文件夹。
- 不要将虚拟目录设置为应用程序,因此ASP.NET应该保留该文件夹。
- 举例来说你的副本
app_offline.htm
文件重命名为 default.htm
(或您的默认文件名列表中的任何内容)到该文件夹中。
这样,IIS应该在访问时以200响应为html文件提供服务 https://www.mywebsite.com/monitor
。
啊,为了纪念阿迪尔森关于搜索引擎的警告,只需添加一个 <meta name="robots" content="noindex">
如果搜索引擎可以访问网站,请访问您的文件。
您可以处理Global.asax Application_Error方法,识别您的网址,识别您的错误,重定向到您的网页
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
Dim ctx = HttpContext.Current
dim myerror = ctx.Error
If HttpContext.Current.Request.Path = "mypath" Then
HttpContext.Current.Response.Redirect("~/mydestpage.aspx")
End If
End Sub
这将首先返回先前请求的302,然后重定向到显示200的页面...
嗨,老兄。这样做时要小心! 200响应可以让您的错误页面被谷歌和其他搜索引擎索引。
如果您仍然选择这样做,我认为您应该创建一个HttpModule,并将其放在模块堆栈的顶部。此模块必须测试App_offline.html文件是否存在,如果存在,则测试该请求是否来自站点监视器。在这种情况下,您可以使用200响应,否则,响应代码必须为503以避免错误的站点索引。
重要提示:您的站点应用程序池必须处于集成模式。