在配置Nginx时经常会看到url rewrite规则,这时就不得不区分redirect和rewrite的区别。
[b]1.URL Redirect (重定向)[/b]
通过[color=red][b]重定向[/b][/color],浏览器知道页面位置发生变化,从而[color=red][b]改变地址栏显示的地址[/b][/color]。
1) 通过重定向,搜索引擎意识到页面被移动了,从而更新搜索引擎索引,将原来失效的链接从搜索结果中移除。
2) 临时重定向(R=302)和永久重定向(R=301)都是亲搜索引擎的,是SEO(Search Engine Optimization)的重要技术。
3) Redirect是[b]浏览器和服务器发生两次请求[/b],也就是服务器命令客户端“去访问某个页面”
4) redirect的URL需要传送到客户端。
5) redirect是从一个地址跳转到另一个地址
比如[color=red]301重定向[/color]的处理流程:
1. User lands on original URL (用户用原始url登陆)
2. Using code, mode_rewrite, etc. the 301 redirects URL to the new one, literally changing the URL that is displayed in the browser from the old to the new (使用mode_rewrite等指令使原始url重定向到新的url,明显的变化就是浏览器上原始url变成了新的url)
3. URL Rewrite process begins again(接着就是url rewrite的流程了,这个流程后面介绍)
[img]http://dl2.iteye.com/upload/attachment/0103/5621/cb00a2dc-c5b7-345b-b760-27ec22d637ef.jpg[/img]
[b]2. URL Rewrite (url 重写)[/b]
[color=red][b]重写,不仅仅可以实现redirect在url上的重定向,还可以直接重写请求到实际的文件以及更多附加功能。[/b][/color]
1) rewrite的URL只是在服务器端
2) Rewrite规则是服务器内部的一个接管,在服务器内部告诉“某个页面请帮我处理这个用户的请求”,[color=red][b]浏览器和服务器只发生一次交互[/b][/color],浏览器不知道是该页面做的响应,浏览器只是向服务器发出一个请求。
3) URL重写用于将页面映射到[color=red]本站[/color]另一页面,若重写到[color=violet][b]另一网络主机(域名),则按重定向处理。[/b][/color]
4) rewrite是把一个地址重写成另一个地址。地址栏不跳转(若是重写到另一网络主机则也可能跳转)。相当于给另一个地址加了一个别名一样。
所以根据重写的地址跨域还是不跨域,rewrite可以做内部,也可以做外部的重写,rewrite可以让url变化,也可以让url不变化。
上述的例子就像用户去买手机,缺货时的两种处理:让用户自己去其他地方买(Redirect);公司从其他的地方调货(Rewrite)。
[b]3. rewirte和redirect对比[/b]
[img]http://dl2.iteye.com/upload/attachment/0103/5623/8369b043-4a09-335c-bfad-255d7b5299bd.png[/img]
参考资料:
[url]http://19920309.blog.51cto.com/8277196/1334449[/url]
[url]http://moz.com/blog/url-rewrites-and-301-redirects-how-does-it-all-work[/url]
[url]http://weblogs.asp.net/owscott/rewrite-vs-redirect-what-s-the-difference[/url]
[b]1.URL Redirect (重定向)[/b]
通过[color=red][b]重定向[/b][/color],浏览器知道页面位置发生变化,从而[color=red][b]改变地址栏显示的地址[/b][/color]。
1) 通过重定向,搜索引擎意识到页面被移动了,从而更新搜索引擎索引,将原来失效的链接从搜索结果中移除。
2) 临时重定向(R=302)和永久重定向(R=301)都是亲搜索引擎的,是SEO(Search Engine Optimization)的重要技术。
3) Redirect是[b]浏览器和服务器发生两次请求[/b],也就是服务器命令客户端“去访问某个页面”
4) redirect的URL需要传送到客户端。
5) redirect是从一个地址跳转到另一个地址
比如[color=red]301重定向[/color]的处理流程:
1. User lands on original URL (用户用原始url登陆)
2. Using code, mode_rewrite, etc. the 301 redirects URL to the new one, literally changing the URL that is displayed in the browser from the old to the new (使用mode_rewrite等指令使原始url重定向到新的url,明显的变化就是浏览器上原始url变成了新的url)
3. URL Rewrite process begins again(接着就是url rewrite的流程了,这个流程后面介绍)
[img]http://dl2.iteye.com/upload/attachment/0103/5621/cb00a2dc-c5b7-345b-b760-27ec22d637ef.jpg[/img]
[b]2. URL Rewrite (url 重写)[/b]
[color=red][b]重写,不仅仅可以实现redirect在url上的重定向,还可以直接重写请求到实际的文件以及更多附加功能。[/b][/color]
1) rewrite的URL只是在服务器端
2) Rewrite规则是服务器内部的一个接管,在服务器内部告诉“某个页面请帮我处理这个用户的请求”,[color=red][b]浏览器和服务器只发生一次交互[/b][/color],浏览器不知道是该页面做的响应,浏览器只是向服务器发出一个请求。
3) URL重写用于将页面映射到[color=red]本站[/color]另一页面,若重写到[color=violet][b]另一网络主机(域名),则按重定向处理。[/b][/color]
4) rewrite是把一个地址重写成另一个地址。地址栏不跳转(若是重写到另一网络主机则也可能跳转)。相当于给另一个地址加了一个别名一样。
所以根据重写的地址跨域还是不跨域,rewrite可以做内部,也可以做外部的重写,rewrite可以让url变化,也可以让url不变化。
上述的例子就像用户去买手机,缺货时的两种处理:让用户自己去其他地方买(Redirect);公司从其他的地方调货(Rewrite)。
[b]3. rewirte和redirect对比[/b]
[img]http://dl2.iteye.com/upload/attachment/0103/5623/8369b043-4a09-335c-bfad-255d7b5299bd.png[/img]
参考资料:
[url]http://19920309.blog.51cto.com/8277196/1334449[/url]
[url]http://moz.com/blog/url-rewrites-and-301-redirects-how-does-it-all-work[/url]
[url]http://weblogs.asp.net/owscott/rewrite-vs-redirect-what-s-the-difference[/url]