保留原始参数的ASP.NET 404(页面未找到)重定向

时间:2009-02-02 17:05:29

标签: asp.net redirect error-handling http-status-code-404

我正在使用具有不同结构的新Web应用程序替换旧的Web应用程序。

我无法更改新应用的虚拟目录路径,因为我的用户已经为旧应用添加了不同链接的书签。

假设我有一位拥有此书签的用户:

http://server/webapp/oldpage.aspx?data=somedata

我的新应用程序将驻留在同一个虚拟目录中,替换旧的应用程序,但它不再是oldpage.aspx,而是具有不同的布局,但它仍然需要来自旧URL的参数。

所以,我已经设置将404错误重定向到redirectfrombookmark.aspx,在那里我决定如何处理请求。

问题是,我收到的唯一参数是“aspxerrorpath = / webapp / oldpage.aspx”,而不是“data”参数,我需要它来正确处理请求。

知道如何在404处理程序中获取完整的“原始”网址吗?

编辑:阅读答案,看起来我没有说清楚问题:

  1. 用户已为许多不同的页面(oldpage1,oldpage2等)添加了书签,我应该平等对待它们。
  2. 每个旧页面的参数几乎相同,我只需要特定的参数。
  3. 我想重新使用“新”应用程序的“旧”虚拟目录名称。
  4. 搜索机器人等不是问题,这是带有动态内容的内部应用程序,它经常过期。
  5. 问题是 - 我可以这样做而不用在我的“新”应用程序中使用旧名称创建一堆空页面,并在其OnLoad中创建Request.Redirect。即可以使用404机制,或Global.asax等中的某些事件处理来完成。

4 个答案:

答案 0 :(得分:5)

出于SEO的目的,您应该从不重定向404错误。 404应该是一个死胡同,有一些有用的信息,如何找到你正在寻找的页面,如站点地图。

您应该使用 301,永久移动。这允许搜索机器人更新其索引而不会丢失分配给原始页面的页面等级,

请参阅:http://www.webconfs.com/how-to-redirect-a-webpage.php,了解如何编码此类响应。

答案 1 :(得分:2)

您可以查看UrlRewritingNet组件。

答案 2 :(得分:1)

您还应该考虑使用Global.ascx(?extention)文件中的一些事件来检查错误并智能地重定向。 OnError事件是您要使用的事件。您将在该时间点(在HttpContext对象下)获得请求中的变量,并且您可以让代码在那里工作而不是404.如果您使用此路由,请确保正确地重定向404以用于除oldpage之外的任何其他内容的.aspx。

对不起,我现在没有任何明确的例子或信息,希望这会指出你正确的方向。

答案 3 :(得分:0)

POST和GET参数仅适用于每个请求。如果您已经知道旧页面的名称(OldPage.aspx),为什么不在其中添加自定义重定向呢?