【发布时间】:2020-08-25 14:48:17
【问题描述】:
我想让所有缺少的内容/“错误”URL 重定向到我们的自定义 404.html 错误页面。 这对于在 Google Analytics 中准确记录 404 错误非常重要。
问题在于,当设置了 responseMode=ExecuteURL 标志时,自定义错误不会保留 404 状态代码,而是始终显示 200 代码。我可以将其更改为 responseMode=Redirect,但这会在重定向到自定义 404.html 页面之前显示 302 状态代码。
所有这些 DOES 都可以使用在 httpError 上设置的“文件”标志......只是不使用我们的服务器端 Perl 所需的“ExecuteURL”标志,包括用于呈现页眉/页脚页面元素。
理想情况下,我们应该能够使用 Azure App Service IIS web.config 将自定义错误设置为:
- 始终在地址栏(和开发工具)中保留/显示请求的(缺失的)URL 请求
- 始终在开发工具中保留/显示“真实”HTTP 状态代码 (404)
- 允许使用服务器端包含使用我们当前的 Perl 设置更新页眉/页脚元素
以下代码用于在地址栏中保留请求的 URL,正确显示带有服务器端页眉/页脚内容的自定义 404.html 页面,但是在开发工具中丢失了 404 状态代码(和谷歌分析)...
<httpErrors>
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404"
responseMode="ExecuteURL"
path="/404.html" />
</httpErrors>
更改为 responseMode="Redirect" 只会将状态码更改为 302,然后再重定向到自定义 404.html...
如果我改为使用 responseMode="File" 这一切正常,但我会丢失使用 Perl 服务器端包含处理的自定义服务器端页眉和页脚...
编辑: 需要明确的是,自定义 404 页面都是 HTML 和 Javascript,但也利用了一些 非常 旧的 Perl 服务器端包含来向页面添加自定义页眉和页脚元素。我们没有使用任何 .NET 框架或 .NET 核心页面...
这种安排应该是可能的,但也许只能使用不同的 Web 服务器,而不是 IIS?也许是 nginx?
最终更新: 不是一个完整的答案,但我们近期的解决方案是使用 nginx 代理配置(已经存在并且可以在 nginx.conf 中更改)来保留 404 错误代码并显示正确的自定义 404.html 静态文件。
我也可以用 Docker 和 nginx 做到这一点,所以我知道 Web 服务器可以处理这种情况......
我已经确定 AFAICT 没有办法让 IIS web.config 不使用 Jason Pan 建议的服务器端代码来处理这个问题。因此,尽管他可能是正确的,但该答案对我们的需求没有帮助。
【问题讨论】:
标签: perl iis web-config azure-web-app-service http-status-code-404