我有一个大型的Web项目,它从经典ASP迁移到ASP.NET(大约时间),并希望重定向来自旧地址的请求,例如:
/some/path/old-page.asp?foo=bar
到新地址:
/other/path/new-page.aspx?qaz=bak
在相当长的时间内,将会有与ASP.NET页面并行运行的经典ASP页面,随着时间的推移,各个页面将被其ASP.NET版本替换。在可能的情况下,我想从旧页面重定向到新页面以防止用户接收404错误,并且还要在页面上保留累积的PageRank。
我的问题是,你如何从经典ASP到新模板进行重定向逻辑?显而易见的解决方案是将old-page.asp替换为一些重定向到new-page.aspx的简单VBScript,但从长远来看,我想摆脱旧的.asp文件,所以我想实现重定向这种方式在网站完全在.NET中运行后也会存在。
一个选项是将.asp扩展名映射到ASP.NET,并将重定向实现为HttpHandler,但我想在将请求传递给ASP.NET之后无法使经典ASP引擎运行
答案 0 :(得分:3)
几年前,我在一家电子商务公司遇到了同样的问题,我们将其网站升级为.NET。主要问题是我们不知道有多少客户在他们的收藏夹中有旧的asp页面,以及SEO的问题。是的,你可以将asp扩展名映射到ASP.net,但是你根本无法运行asp文件,所以这需要你更新所有的asp页面,这可能是不可行的。
我当时发现的最佳解决方案是在IIS中实现ISAPI重定向过滤器。这是一个由IIS BEFORE,asp或asp.net运行时运行的应用程序。它将根据您想要的url或任何规则做出决定,是否应该允许运行asp文件或是否应该重定向,或者使用url-rewriting来处理请求。它并不总是一个干净的操作,因为它在您的网站请求之前运行,如果其他开发人员不知道它正在运行,则可能在以后发生混淆。所以请确保你走这条路,你的网站有很多评论或文档,让开发人员知道在IIS运行中有这个东西......
如何在Code Project中实现这一点有一个很好的解释。去这里看看吧。 http://www.codeproject.com/KB/ISAPI/isapiredirector.aspx
祝你好运!
答案 1 :(得分:1)
您应该使用“HTTP 301 - 永久移动”响应代码,因为这正是它的设计目的。
http://en.wikipedia.org/wiki/HTTP_301
ISAPI重定向过滤器的工作原理是,是的,它会将访问者重定向到新的URL。
然而,ISAPI重定向策略存在三个关键问题。