问题 response.redirect和asp中的响应状态301重定向有什么区别?


我们的asp应用程序正在转移到新服务器,我想实现一个永久URL重定向。我知道以下两种方法,我需要了解哪一个用户超过其他什么时候?

选项1:

<%@ Language=VBScript %><% Response.Redirect "http://www.example.com" %>

选项2:

<%@ Language=VBScript %><% Response.Status="301 Moved Permanently" 
  Response.AddHeader "Location","http://www.example.com/" %>

谢谢,

尼基尔。


10977
2018-06-11 19:00


起源



答案:


Response.Redirect发出302,这是一个临时重定向。 301,使用您列出的Response.AddHeader,用于永久重定向。

301和302之间的差异对于搜索引擎优化具有一定的重要性。 301将保留旧位置的所有搜索排名。另一方面,如果您不希望将新页面编入索引,则可以使用Response.Redirect(302),因为引擎会认为重定向是临时的。谷歌没有索引302,因为许多垃圾邮件发送者使用它来试图提高他们的排名。

由于您将永久迁移到新服务器,因此301是最佳选择。


12
2018-06-11 19:09





Response.Redirect() (和等效方法 RedirectPermanent() 对于301)在幕后做了很多事情。它null检查请求的URL字符串,对其进行编码,调用事件处理程序 Redirecting 如果有任何事件,最后调用 Response.End(),将响应刷新回浏览器并中止当前线程。

最终,您可能不会注意到手动设置标头和调用重定向之间存在很大差异。

顺便提一下,有更多(和更好)的选择来处理这个。 IIS有一个 URL重写模块,这将允许您重定向给定的URL,而无需将您的页面作为请求处理程序,并集中管理您的URL,以便更轻松地管理搜索引擎。


1
2018-06-11 19:06



这是不正确的。详情请见我的回答。 - Charles Boyung
这里有什么不对的? - womp
正是我在答案中所说的。没有办法让Response.Redirect做301。 - Charles Boyung
你调用Response.RedirectPermanent()。它只是调用Response.Redirect()。无论哪种方式,我的回答是怎么回事? - womp
它不会在内部调用Response.Redirect。你在谈论世界上的什么?它们都设置了标题和响应状态 - 两者都没有调用另一个。 - Charles Boyung


答案:


Response.Redirect发出302,这是一个临时重定向。 301,使用您列出的Response.AddHeader,用于永久重定向。

301和302之间的差异对于搜索引擎优化具有一定的重要性。 301将保留旧位置的所有搜索排名。另一方面,如果您不希望将新页面编入索引,则可以使用Response.Redirect(302),因为引擎会认为重定向是临时的。谷歌没有索引302,因为许多垃圾邮件发送者使用它来试图提高他们的排名。

由于您将永久迁移到新服务器,因此301是最佳选择。


12
2018-06-11 19:09





Response.Redirect() (和等效方法 RedirectPermanent() 对于301)在幕后做了很多事情。它null检查请求的URL字符串,对其进行编码,调用事件处理程序 Redirecting 如果有任何事件,最后调用 Response.End(),将响应刷新回浏览器并中止当前线程。

最终,您可能不会注意到手动设置标头和调用重定向之间存在很大差异。

顺便提一下,有更多(和更好)的选择来处理这个。 IIS有一个 URL重写模块,这将允许您重定向给定的URL,而无需将您的页面作为请求处理程序,并集中管理您的URL,以便更轻松地管理搜索引擎。


1
2018-06-11 19:06



这是不正确的。详情请见我的回答。 - Charles Boyung
这里有什么不对的? - womp
正是我在答案中所说的。没有办法让Response.Redirect做301。 - Charles Boyung
你调用Response.RedirectPermanent()。它只是调用Response.Redirect()。无论哪种方式,我的回答是怎么回事? - womp
它不会在内部调用Response.Redirect。你在谈论世界上的什么?它们都设置了标题和响应状态 - 两者都没有调用另一个。 - Charles Boyung


默认情况下,正常重定向使用HTTP 状态302。重定向 状态301 不会被searchbots(如Googlebot)索引,如果是,它们将从现有索引中删除。如果要将旧URL“更新”为较新的URL,则非常有用。搜索机器人无论如何都会将状态为302的重定向编入索引,因此您可能最终会在搜索结果中出现污染。您通常使用状态302作为例如PRG模式和状态301 常驻 重定向就像你现在正在做的那样。


0
2018-06-11 19:08





Response.Redirect向浏览器发送“302 - 暂时移动”状态代码,根据您正在做什么,这可能会也可能不会。如果您要重定向到内容的正确位置,则需要执行301重定向,因为搜索引擎无法针对302进行正确爬网。


-2
2018-06-11 19:10



这不是100%正确。如果将“permanent”标志设置为false,则Response.Redirect仅发送302。它可以发送301或302.他可以选择同时执行这两项操作,他不需要手动设置标头来发送301。 - womp
@womp - 你完全不知道你在说什么。没有“永久”的旗帜。 Response.Redirect函数接受一个或两个参数 - 目标URL和可选的布尔值来结束响应。请教育自己: msdn.microsoft.com/en-us/library/a8wa7sdt.aspx - Charles Boyung
@womp - 如果您无法读取整个页面 - 这是您的重要部分 - “ASP.NET通过返回302 HTTP状态代码来执行重定向。” - Charles Boyung
你的问题方式比我更直接。如果他想发送301,他可以使用Response.RedirectPermanent()。我将他的问题解释为“手动设置标头或使用重定向?”。你还没有说我的答案有什么问题。 - womp
@womp - 他特别询问了Response.Redirect与设置响应标头。在这方面你的答案是完全错误的。你根本没有在答案中提到这个功能。而Response.RedirectPermanent对于Asp.Net 4.0来说是全新的,所以它实际上很可能是他没有使用它,否则他会提到这一点。 - Charles Boyung