【发布时间】:2020-07-06 18:33:45
【问题描述】:
我正在为专用于汽车/摩托车销售的专有 CMS 构建自定义 404 响应页面。我遇到的问题是,有时谷歌会为经销商库存中的一个单元编入索引,但此后已被删除,所以我正在为这些实例构建一个自定义 404 页面。我的问题是在保留 404 状态的同时进行重定向。
页面是用经典的 ASP 编写的。长话短说,IIS 将 404 状态重定向到一个自定义的 ASP 页面,然后我使用该页面将其定向到我的 404 页面......这个想法是,只有当 404 来自丢失的库存时,它才会显示我的页面,然后其他页面的行为正常。
这是经过几天尝试整理后在 Chrome 中运行的代码:
<%
Response.Status = "404 Not found"
%>
<script language="JScript" ruant="server">
window.location = window.location.origin + "/src/xInventory404.asp";
</script>
<%
Response.End
%>
问题是这在 Firefox 或 Internet Explorer 11 中不起作用,除非我删除 Response.Status,但如果我这样做了,我会丢失 404 状态。我不能只使用Response.Redirect,因为它会丢失 404 并插入我不想用于 SEO 的 302。我也尝试过Server.Execute 和Server.Transfer,即使在 Chrome 中也无法使用。
我已经在这个圈子里转了几个星期,但我在网上看到的任何东西都没有帮助,所以我想我会看看这里是否有人有我可以尝试的其他想法。有人有什么想法或建议吗?
【问题讨论】:
-
这是什么,谁认为这是个好主意?出于某种原因,IIS 内置了对自定义错误页面的支持。
-
这里没有任何争论说它很乱,但这是我继承的系统。老实说,如果由我决定,我只会响应。重定向该死的东西并完成它......粘性检票口是保留 404 的要求。我正在尝试以一种在我给定的参数范围内工作的方式来做这件事。如果我想做的事情是不可能的,我可以接受,但我必须先探索我的所有选择沿着那条路前进。
-
那么您是否尝试了 IIS 中的自定义错误页面方法,而不是尝试手动强制自定义 404?
-
您应该能够替换自定义 404 页面,或者至少使用
Request.ServerVariables("URL")添加条件检查以检查触发 404 的地址的相对路径,然后添加您的内容或使用Server.Transfer()加载您非常具体的自定义 404 页面。 -
我注意到您的 JS 具有属性
ruant="server",我认为您的意思是runat="server"。我不确定window.location是否可以在服务器端代码中工作,因为它看不到您的浏览器。还要注意<script runat="server"></script>中的代码在<% %>中的代码之前执行
标签: asp-classic http-status-code-404