我们托管一个多租户网站,该网站根据域名进行品牌化以适合客户。该网站是使用 Asp.net MVC4 开发的。
我们计划在维护期间使用 app_offline.htm 文件使网站脱机。但是,我们希望维护页面基于域进行品牌化。为了实现这一点,我们决定使用 UrlRewrite 模块。
重写规则的逻辑是,如果请求来自特定域并且网站中存在 app_offline.htm 文件,则重定向到该域特定(品牌)app_offline 页面。我们的 web.config 中的规则如下:
<!-- App_Offline redirects -->
<rewrite>
<rules>
<rule name="Domain1 App_offline redirects" stopProcessing="true">
<match url="^(.)*" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^domain1" />
<add input="{DOCUMENT_ROOT}/app_offline.htm" matchType="IsFile" />
<add input="{REQUEST_URI}" pattern="domain1.app_offline.htm" negate="true" />
</conditions>
<action type="Redirect" url="https://{SERVER_NAME}/domain1.app_offline.htm" />
</rule>
<rule name="Domain2 App_offline redirects" stopProcessing="true">
<match url="^(.)*" />
<conditions logicalGrouping="MatchAll">
<add input="{HTTP_HOST}" pattern="^domain2" />
<add input="{DOCUMENT_ROOT}/app_offline.htm" matchType="IsFile" />
<add input="{REQUEST_URI}" pattern="domain2.app_offline.htm" negate="true" />
</conditions>
<action type="Redirect" url="https://{SERVER_NAME}/domain2.app_offline.htm" />
</rule>
</rules>
</rewrite>
我们现在面临的问题是,虽然这个 Url 重写规则启动并将用户重定向到品牌离线页面,但它最初显示的是非品牌 app_offline.htm 页面的内容。几秒钟后,刷新页面时,会显示实际的品牌内容。
我们还注意到,当显示通用 app_offline.htm 内容时,HTTP 响应为 503,而稍后显示品牌 app_offline.htm 时,HTTP 状态为 200。
有什么方法可以克服通用 app_offline.htm 内容的初始显示?
您是否发现上述 Url 重写方法存在任何性能问题?
提前致谢。
编辑:我已经意识到刷新域特定的 app_offline 页面会导致它被缓存在浏览器中,这就是显示内容的地方。在不刷新品牌 app_offline 页面的情况下,尝试访问网站上的任何其他页面始终会显示通用 app_offline.htm 内容:) 所以,寻找替代方案......