路由经典ASP请求.NET - SEO重定向(Routing Classic ASP Reque

2019-08-31 18:11发布

我们正在与一个.NET 3.5的解决方案替换旧的传统的ASP网站。

我们需要重定向所有的经典ASP请求到aspx页面(即contactus.asp,现在可以路线/contact-us/default.aspx)。 我woudl喜欢是请求打Global.asax的,所以我可以做这样的事情

If url == "bob.asp"
    Response.Status = "301 Moved Permanently";
    Response.AddHeader("Location", SiteConfig.SiteURL + redirectUrl);
End If

有两种不雅的解决方案。

a)将Global.asa文件,并通过做路由。

B)地图ASP文件到.NET引擎。 大,但随后如果我们需要托管在我们的网站IIS将发送请求到错误的地方传统的ASP网站。

我发现了一个很好的解决方案在这里

http://forums.asp.net/p/1202225/3458901.aspx

其中指出这样的事情可能工作...

<buildProviders>

<add extension=".php" type="System.Web.Compilation.PageBuildProvider" />

</buildProviders>
<httpHandlers>

<add verb="*" path="*.php" type="System.Web.UI.PageHandlerFactory" validate="True" />

</httpHandlers>

这个例子是PHP的,但我认为同样的事情会为ASP工作。 但是之后改变.PHP在本例中为.asp,并把这些标签,我有没有快乐(500服务器错误实际上)web.config中的正确部分。

任何人都可以揭示出这个任何灯光或给我一个完美的解决方案。

有一种感觉,将上述溶液难道不为PHP或ASP作为工作IIS将有路由请求它获取到.NET发动机之前。

提前致谢

史蒂夫

Answer 1:

大编辑:我指出通过@EdSF在评论认为答案是错误的。 在怀疑我检查使用Firebug,并且,事实上, 这是错误的

您需要使用Context.Response.RedirectLocation的状态代码工作。


我在做同样的在Global.asax中:

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim fullOriginalpath As String = Request.Url.ToString.ToLower

    If (fullOriginalpath.Contains("/verarticulo.asp?articuloid=")) Then
        Context.Response.StatusCode = 301
        ''// this does not work, returns a 302
        ''//Context.Response.Redirect("/noticias/" + getIDFromPath(fullOriginalpath))

        ''// this does right way
        Context.Response.RedirectLocation = "/noticias/" + getIDFromPath(fullOriginalpath)
        Context.Response.End()
    ElseIf (fullOriginalpath.Contains("/archivo.asp")) Then
        Context.Response.StatusCode = 301
        Context.Response.RedirectLocation = "/archivo/" 
        Context.Response.End()
    ElseIf (fullOriginalpath.EndsWith("/default.asp")) Then
        Context.Response.StatusCode = 301
        Context.Response.RedirectLocation = "/"
        Context.Response.End()
    End If
End Sub

你必须做,如果你正在使用II6你唯一必须配置这样这个ISAPI筛选器:

该文件是c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll



Answer 2:

最简单的就是在IIS级别使用自定义404错误页面。 此页面可以是任何ASPX页面; 您可以访问通过HttpContext的原始请求。

在IIS 6.0中,你会发现,在默认情况下的URL映射到.NET发动机(的.aspx ,, ASMX等)使用web.config中定义自己的404处理器。 不管; 你甚至会引起这些网页发送给IIS 404页,如果编辑ASPX引擎映射,并确保为tickbox“文件必须存在”设置。 这会将所有博肯链接到IIS 404处理器,即使它们被映射到.NET处理程序。 人们作出的努力全部重定向断开链接到web.config中定义404handler的错误; 它定义了一个instread必须更容易,如果你只是强制所有去IIS。



Answer 3:

爱德华多的Molteni的回答工作,除了一两件事。 它实际上是通过浏览器中的302,而不是301。

我相信不是:

Context.Response.StatusCode = 301 
Context.Response.Redirect("/something/") 

它应该是:

Context.Response.StatusCode = 301 
Context.Response.RedirectLocation = "/something") 

该Response.Redirect的基本上是中断你用的Response.StatusCode设置和浏览器最终得到一个“302找到”。

我真的不知道搜索引擎如何处理302 VS 301所以也许它不是一个问题。 在我看来,虽然,一个真正的永久重定向(301)将是首选。

对于那些在框架上的V4,似乎有一个新的选择:

Response.RedirectPermanent("/something")

我没有测试过这一点,但我假设它提供了一个301状态码。 详情点击此处: HttpResponse.RedirectPermanent



Answer 4:

我用的是智能404处理器脚本的修改版本从http://evolvedcode.net/content/code_smart404/ 。 我添加的代码基于在我们的数据库中的表做自定义映射。

这个脚本很容易被重新编写ASP.NET中,然后被映射相同的方式。



文章来源: Routing Classic ASP Requests To .NET - SEO Redirects