当网站地址变更时,需要将旧域名301重定向到新的URL地址,实际上就是把旧地址的访问请求重新引导到新域名上。301永久重定向无论是对用户还是搜索引擎都是比较友好的,对SEO完全没有不好的一面。通过旧网站的关键词排名和PR等级都会传递给新网站,网站更换了域名,用域名301永久重定向的方式告诉搜索引擎本网页已经永久性转移到新的域名,避免搜索引擎无法找到页面,网站对于搜索引擎相对比较友好。

域名重定向的好处有利于用户体验和搜索引擎抓取,301重定向跳转对搜索引擎的好处有、增加域名权重、对网页收录的优化、有利于网页PR传递、可促进搜索引擎优化效果、对用户体验表示友、避免造成404错误页面。使用301重定向把地址指向新的域名后,搜索引擎只对对新域名进行索引,同时将旧地址原有的链接转移搭配新域名下。正确的使用301永久性重定向命,对排名不会产生任何影响。

域名301重定向页面转跳的操作方法

一、域名301重定向什么情况下使用

1、网站域名变更时,使用301永久重定向将旧域名重定向至新域名,挽回关键词排名和流量损失。

2、因某些原因需要删除网站中的个别目录时,比如我要删除巨推传媒:400-606-5558的一级导航,这种情况就可以使用301永久重定向到网站首页。

3、多个域名需要指向同一个站点时,打算实现网址规范化,通过301永久重定向可以实现。

二、http中的重定向和请求转发的区别(包含JS跳转方法)

很简单,重定向是客户端行为,转发是服务器行为。转发属于一次请求,重定向属于第2次请求,转发地址栏不会发生改变,重定向地址栏会改变,转发在项目内,重定向 可以转到项目外。当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一个请求,而浏览器将不会知道这个过程。 与之相反,重定向方式的含义是先进个页面通知浏览器发送一个新的页面请求。

域名301重定向页面转跳的操作方法

1、调用方式 
我们知道,在servlet中调用转发、重定向的语句如下:
request.getRequestDispatcher("new.jsp").forward(request, response);//
转发到new.jsp
response.sendRedirect("new.jsp");//
重定向到new.jsp
jsp页面中你也会看到通过下面的方式实现转发:
当然也可以在jsp页面中实现重定向:
<%response.sendRedirect("new.jsp");//
重定向到new.jsp%>

2、本质区别

解释一  
一句话,重定向是客户端行为转发是服务器行为。为什么这样说呢,这就要看两个动作的工作流程:

转发过程:客户浏览器发送http请求----》web服务器接受此请求--》调用内部的一个方法在容器内部完成请求处理和转发动作----》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其先进次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

重定向过程:客户浏览器发送http请求----》web服务器接受后发送302状态码响应及对应新的location给客户浏览器--》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址----》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

解释二

重定向,其实是两次request, 
先进次,客户端request   A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。
在重定向的过程中,传输的信息会被丢失。
举例:response.sendRedirece(“loginsucess.jsp”)
请求转发是服务器内部把对一个request/response的处理权,移交给另外一个 
对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。
 传输的信息不会丢失。

举例:

//Request Dispatcher dis=request.getRequestDispatcher(“loginsuccess”)

//dis.forward(request,response):

域名301重定向页面转跳的操作方法

前言

html ,js 可以实现页面跳转。

jsp , asp, php 也有各自页面跳转与重定向的方式。

下文针对js 和jsp 的页面跳转实现方式进行一个总结。

html 页面跳转方式

可以使用html 的meta 标签实现页面的跳转。

[html] view plain copy

1.   

2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  

3.   

4.   

5.  New Document   

6. <META NAME="Author" CONTENT="oscar999">  

7. <meta http-equiv="refresh" content="0; URL=http://www.haotui.com.cn">  

8. 

10.   

11.   

12.   

13. This is Test Page  

14.   

15.   

这种用法比较常使用在:

新旧系统升级的状况下, 暂时保留旧系统,通过域名进入时自动转到新系统中。

JS 页面跳转方式

1. 使用window.location = "newurl"

[html] view plain copy

1.   

2. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">  

3.   

4.   

5.  New Document   

6. <META NAME="Author" CONTENT="oscar999">  

7.   

8.   

9.   

10.   

11. This is Test Page.  

12. 

15.   

16.   


也可以使用 window.location.href = "http://www.haotui.com.cn";

2. 使用 window.navigate

[html] view plain copy

1. 

3.  window.loction.replace方式实现页面跳转

3个jsp页面(1.aspx, 2.aspx, 3.aspx),进系统默认的是1.aspx,当我进入2.aspx的时候, 2.aspx里面用window.location.replace("3.aspx");

与用window.location.href ("3.aspx");

从用户界面来看是没有什么区别的,但是当3.aspx页面有一个"返回"按钮,调用window.history.go(-1); wondow.history.back();方法的时候,一点这个返回按钮就要返回2.aspx页面的话,区别就出来了,当用 window.location.replace("3.aspx");连到3.aspx页面的话,3.aspx页面中的调用 window.history.go(-1);wondow.history.back();方法是不好用的,会返回到1.aspx。

JSP跳转方式

JSP 跳转方式大约有三种:

1. response.sendRedirect(“newurl”);

 -- 此语句前不允许有out.flush(),如果有,会有异常:
java.lang.IllegalStateException: Can't sendRedirect() after data has committed to the client.
at com.caucho.server.connection.AbstractHttpResponse.sendRedirect(AbstractHttpResponse.java:558)

 --跳转后浏览器地址栏变化

 --如果要跳到不同主机下,跳转后,此语句后面的语句会继续执行,如同新开了线程,但是对response的操作已经无意义了

   如果要跳到相同主机下,此语句后面的语句执行完成后才会跳转;

2. response.setHeader("Location","newurl");

[html] view plain copy

1. response.setStatus(302);  

2. response.setHeader("location","newurl");  

这种使用方式要结合 setStatus(302),  302 这个状态码就是告诉浏览器要重定向了。

1. 此语句前不允许有out.flush(),如果有,页面不会跳转。

2. 跳转后浏览器地址栏变化

3. 此语句后面的语句执行完成后才会跳转

此语句前不允许有out.flush(),如果有,会有异常:

跳转后浏览器地址栏不变,但是只能跳到当前主机下

此语句后面的语句执行完成后才会跳转  

跳转后得路径变为当前路径,图片不是绝对路径将无法显示

举例:

整个简单的例子:  两个文件 a.jsp 和 b.jsp .

[html] view plain copy

1.   

2.   

3. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"  

4.     pageEncoding="ISO-8859-1"%>  

5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www2.w3.org/TR/html4/loose.dtd">  

6.   

7.   

8. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  

9. Insert title here  

10.   

11.   

12. Before: This is a.jsp! 
  

13. <%  

14.     //response.sendRedirect("b.jsp");  

15.   

16.     //response.setStatus(302);  

17.     //response.setHeader("location","b.jsp");  

18.   

19. %>  

20.   

21. <jsp:forward page="b.jsp"/>  

22. After: This is a.jsp!  

23.   

24.   


对于jsp 而言, 就需要嚼一嚼Redirect 和 forward 的差别了。

就字面意思而已: Redirect 翻译成重定向, forward翻译成转发。

类别

概念

共享数据

应用

Redirect

URL重新定向:可以是任意的URL

不能共享request里面的数据

一般用于用户注销登录时返回主页面和跳转到其它的网站等等

Forward

页面的转发:只能是同一个Web应用程序的其他Web组件

转发页面和转发到的页面可以共性request里面的数据

一般用于用户登录的时候根据角色转发到相应的模块等等

  


三、
http重定向301/302/303/307

301 永久重定向,告诉客户端以后应从新地址访问.

302 作为HTTP1.0的标准,以前叫做Moved Temporarily ,现在叫Found. 现在使用只是为了兼容性的处理,包括PHP的默认Location重定向用的也是302.

但是HTTP 1.1 有303 和307作为详细的补充,其实是对302的细化

303:对于POST请求,它表示请求已经被处理,客户端可以接着使用GET方法去请求Location里的URI。

307:对于POST请求,表示请求还没有被处理,客户端应该向Location里的URI重新发起POST请求。

测试的test.html代码,发起post请求到test.php页面中

test.php页面分别给出3种重定向处理,都跳到test2.php

test2.php打印出post的结果

(至于怎么写..自己查手册吧,PHP发送头很容易.)

1.....

2.301 => "HTTP/1.1 301 Moved Permanently",

3.302 => "HTTP/1.1 302 Found",

4.303 => "HTTP/1.1 303 See Other",

5.307 => "HTTP/1.1 307 Temporary Redirect",

6.....

测试结果:

301,302和303的处理结果是一样的,直接跳转到test2.php,post没有内容

307的会重新post请求到test2.php,并且给出页面提示

重定向实际使用是一个响应码(301或302或303或307)和一个响应头location,当浏览器收到响应的时候check响应码是3xx,则会取出响应头中location对应的url(重定向中url的编码问题),然后将该url替换浏览器地址栏并发起另一次HTTP事务。

关于301、302、303、307的区别,找不到好的文章,因此打算直撸HTTP 1.0规范和HTTP 1.1规范,结合一些实际的案例和tomcat实现,来说清楚这几个状态码的差异。

四、 https301重定向

原请求访问的是http://haotui.com.cn,然后返回302location=https://haotui.com.cn,从http转到https。不过关于响应行中302状态码的描述存在争议,在下文中会详细讨论。

域名301重定向页面转跳的操作方法

五、tomcat重定向源码

域名301重定向页面转跳的操作方法

六、http详细介绍

http 1.0规范中有2个重定向——301和302,在http 1.1规范中存在4个重定向——301、302、303和307,其中302是值得讨论讨论的。

1、 http 1.0

301状态码在HTTP 1.0和HTTP 1.1规范中均代表永久重定向,对于资源请求,原来的url和响应头中location的url而言,资源应该对应location中的url。对于post请求的重定向,还是需要用户确认之后才能重定向,并且应该以post方法发出重定向请求。

关于post请求重定向用户确认的问题,实际上浏览器都没有实现;而且post请求的重定向应该发起post请求,这里浏览器也并不一定遵守,所以说HTTP规范的实现并未严格按照HTTP规范的语义。

在301中资源对应的路径修改为location的url,在SEO中并未出现问题,但是在302中就出现了302劫持问题。

1、301永久移动

被请求的资源被分配了一个新的永久URL,并且任何未来对这个资源的引用应该使用该URL来完成。具有链接编辑能力的客户端应该在可能的情况下自动地将对request-URL的引用重新链接到由服务器返回的新引用。

新的URL必须由response.unless中的location字段给出,如果是HEAD请求,则响应的实体主体应该包含一个带有到新URL的超链接的短信。

如果使用POST方法接收到301状态代码以响应请求,则用户agnet不能自动重定向请求,除非用户可以确认,否则可能会改变发出请求的条件。

NOts:在收到301状态码后自动重定向POST请求时,一些现有的用户代理将错误地将其更改为GET请求。

在http 1.0规范中,302表示临时重定向,location中的地址不应该被认为是资源路径,在后续的请求中应该继续使用原地址。

规范:原请求是post,则不能自动进行重定向;原请求是get,可以自动重定向;

实现:浏览器和服务器的实现并没有严格遵守HTTP中302的规范,服务器不加遵守的返回302,浏览器即便原请求是post也会自动重定向,导致规范和实现出现了二义性,由此衍生了一些问题,譬如302劫持,因此在HTTP 1.1中将302的规范细化成了303和307,希望以此来消除二义性。

补充:302劫持——A站通过重定向到B站的资源xxoo,A站实际上什么都没做但是有一个比较友好的域名,web资源xxoo存在B站并由B站提供,但是B站的域名不那么友好,因此对搜索引擎而言,可能会保存A站的地址对应xxoo资源而不是B站,这就意味着B站出了资源版权、带宽、服务器的钱,但是用户通过搜索引擎搜索xxoo资源的时候出来的是A站,A站什么都没做却被索搜引擎广而告之用户,B站做了一切却不被用户知道,价值被A站窃取了。

2、302暂时移动

被请求的资源暂时驻留在不同的URL中。因为重定向可能偶尔会被改变,所以clinet应该继续使用请求URL来作为将来的请求。

URL必须由响应中的位置字段给出。除非是HEAD请求,否则响应的实体主体应该包含一个带有到新URL的超链接的短注释。

如果使用POST方法接收到302状态码以响应请求,则除非用户能够确认,否则用户代理不能自动重定向请求,因为这可能会改变发出请求的条件。

注意:在收到302状态码后自动重定向POST请求时,一些现有的用户代理将错误地将其更改为GRT请求。

2. http 1.1

301和http 1.0规范中保持一致,注意资源对应的路径应该是location中返回的url,而不再是原请求地址。

302在HTTP 1.1中,实际上302是不再推荐使用的,只是为了兼容而作保留。规范中再次重申只有当原请求是GET or HEAD方式的时候才能自动的重定向,为了消除HTTP 1.0中302的二义性,在HTTP 1.1中引入了303和307来细化HTTP 1.0中302的语义。

1、302found

被请求的资源暂时驻留在一个不同的URL中,因为重定向可能会被改变,客户端应该继续使用请求URL来做未来的请求,这个响应只有在缓存控制或者Expires头域指示的时候才能被缓存。

临时URL应该由响应中的位置字段给出。如果请求方法是HEAD,响应实体应该包含一个超链接到新URL的短超文本记录。

如果为了响应GET或HEAD以外的请求而接收到302状态码,除非用户能够确认,否则用户代理不能自动重定向请求,因为这可能会改变发出请求的条件。

注意:RFC 1945和RFC 2068指定客户端不允许更改重定向的请求上的方法。但是,大多数现有的用户代理实现将302视为303响应,对位置字段值执行GET原始请求方法的状态代码303和307已经被添加用于希望明确地清楚客户端期望哪种反应的服务器。

303在HTTP 1.0的时候,302的规范是原请求是post不可以自动重定向,但是服务器和浏览器的实现是运行重定向。

把HTTP 1.0规范中302的规范和实现拆分开,分别赋予HTTP 1.1中303和307,因此在HTTP 1.1中,303继承了HTTP 1.0中302的实现(即原请求是post,也允许自动进行重定向,结果是无论原请求是get还是post,都可以自动进行重定向),而307则继承了HTTP 1.0中302的规范(即如果原请求是post,则不允许进行自动重定向,结果是post不重定向,get可以自动重定向)。

2、303see other

对请求的响应可以在不同的URL下找到,并且应该在该资源上使用GET方法来获取。这个方法的存在主要是为了允许输出POST激活的脚本来将用户代理重定向到选定的资源。新的URL 不是原始请求资源的替代引用,303响应不能被缓存,但是对第二个(重定向的)请求的响应可能是可缓存的。

不同的URL应该通过响应中的位置字段求得。如果请求方法是HEAD,响应实体应该包含一个超链接到新URL的短超文本记录。

注意:很多HTTP-1.1用户代理不了解303的状态。当与这些客户端的互操作性是一个问题时,可以使用302状态代码。因为大多数用户代理对302响应做出反应,如303所述。

307在http 1.1规范中,307为临时重定向,注意划红线的部分,如果重定向307的原请求不是get或者head方法,那么浏览器一定不能自动的进行重定向,即便location有url,也应该忽略。

也就是307继承了302在HTTP 1.0中的规范(303继承了302在HTTP 1.0中的实现)。

3、307当代重定向

被请求的资源暂时驻留在一个不同的URL中。由于重定向可能偶尔被修改,所以客户端应该继续使用请求URL作为将来的请求。这个响应只有在cache-control或expires头域指示的情况下才能被缓存。

临时URL应该由响应中的位置字段给出。如果请求方法是HEAD,那么响应实体应该包含一个超链接到新URL(d)的短超文本记录,因为许多pre-HTTP / 1.1 用户代理不理解307状态。因此,注释应该包含用户在新的URL上重复原始请求所需的信息。

如果接收到307状态码以响应除GET或HEAD之外的请求,则用户代理不能自动重定向请求,除非用户可以确认它,因为这可能会改变发出请求的条件。

在HTTP 1.0规范中,302的规范并没有被服务器和浏览器遵守,即规范和实现出现了二义性,因此在HTTP 1.1中,将302的规范和实现拆分成了303和307。

浏览器对307状态的处理规划与302状态相同,之所以将值307引入到HTTP1.1中,是因为在最初的消息是POST的情况下,许多浏览器依旧错误地跟随302响应中的定向信息。浏览器应该只在接收到303响应状态时才从POST请求的重定向信息。引入这个新状态是为了去除二义性:如果接到303响应,则进行进行GET和POST请求的重定向,如果接收到307响应,对于GET请求的重定向,则继续进行,但对于POST请求的重定向,则不在继续下去。

七、HTTP状态码302、303、307区别

HTTP状态码3XX表示重定向,表明浏览器需要执行某些特殊的处理以正确处理请求。

301 Moved Permanently 
永久性定向。该状态码表示请求的资源已被分配了新的URI,以后应使用资源现在所指的URI。

302 Found 
临时性重定向。该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能使用新的URI访问。和301相似,但302表示的资源不是永久移动,只是临时性的。换句话说,已移动的资源对应的URI将来还有可能发生变化,比如,用户把uri保存为书签,但不会像301状态码出现时那样更新书签,而是仍旧保留返回302状态码的页面对应的uri

303 See Other 
该状态码表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源,=, 
303和302状态码有着相同的功能,但是303明确表示客户端应当采用get方法获取资源,这点与302状态码有区别。 
比如,当使用post方法访问CGI程序,其执行后的处理结果为希望客户端能以get方法重定向到另一个uri上去时,返回303状态码。虽然302也可实现相同的功能,但这里使用302状态码是最理想的。

当301、302、303响应状态码返回时,几乎所有浏览器都会把post改成get,并删除请求报文内的主体,之后请求会自动再次发送。 
301、302标准是禁止将post方法改变成get方法的,但实际使用时大家都会这么做。

307 Temporary Redirect 
临时重定向。该状态码与302有相同的含义。尽管302标准禁止post变化get,但实际使用时大家不遵守。 
307会遵照浏览器标准,不会从post变为get。但是对于处理响应时的行为,各种浏览器有可能出现不同的情况。

本文由巨推传媒:400-606-5558提供的域名301重定向页面转跳的操作方法

作者: 巨推传媒:400-606-5558

版权属于: 巨推传媒:400-606-5558,

版权所有。转载时必须以链接形式注明作者和原始出处及本声明。