我正在重写一个使用多种不同非微软技术编写的旧网站。新站点是asp.net 网络表单。
我在数据库中有一个 OLD url 的列表,并且有一个例程将根据数据库中的 url 列表检查请求的页面 url,并执行适当的 301 重定向到内容 NEW url。
但是,从效率的角度来看,我的问题是,只有在请求的 Url 本质上是 404/未找到时,我才能执行此 OLD url 查找。我不想在每个页面请求(通过 global.asax 中的 Application_BeginRequest)时触发我的“Check-Old-Urls-And-Redirect-If-Found”例程,因为大多数情况下,请求的页面将是不需要 301 重定向的有效新 .net 页面。因此,我希望只有在它基本上要抛出 404 错误时才能触发我的例程。
我检查数据库中旧站点 URL 的例程已缓存,因此至少它不会每次都访问数据库,但我只想阻止它甚至调用此例程(并且偶尔会在缓存过期时访问数据库)没有必要的时候。
我在想也许我可以从 global.asax 中的 Application_Error 例程中执行旧的 url 查找,检查 404 状态的错误代码,在这种情况下,执行旧的 url 查找,但是在测试时,它似乎没有在 global.asax 的 Application_Error 例程中击中我的断点 - 相反,浏览器显示 IIS 7 404 Not Found 错误。
浏览器必须接收到对新 url 的 301 响应并且不会得到不正确的 404 响应代码(除非请求的 url 既不是新的也不是旧的风味 url)。
谁能推荐一种有效的方法来处理这种情况?