Java:URL rewrite

Java:URL rewrite

原帖收藏于IT老兵博客

前言

在工作中不断遇到url rewrite这个概念,这个概念和redirect到底有什么区别,什么时候适用,需要总结一下。

正文

介绍

很神奇的是,通过google查这个关键字,维基百科的解释,更多偏向于path info的概念,而不是我所理解的那个概念。

最早接触url rewrite是在配置apache服务器的时候,参考这里,可以对request的url进行重写,把实际需要的内容返回给客户端,并且把客户端的url改变。

以下是一些摘录:

Summary
The mod_rewrite module uses a rule-based rewriting engine, based on a PCRE regular-expression parser, to rewrite requested URLs on the fly. By default, mod_rewrite maps a URL to a filesystem path. However, it can also be used to redirect one URL to another URL, or to invoke an internal proxy fetch.


mod_rewrite provides a flexible and powerful way to manipulate URLs using an unlimited number of rules. Each rule can have an unlimited number of attached rule conditions, to allow you to rewrite URL based on server variables, environment variables, HTTP headers, or time stamps.


mod_rewrite operates on the full URL path, including the path-info section. A rewrite rule can be invoked in httpd.conf or in .htaccess. The path generated by a rewrite rule can include a query string, or can lead to internal sub-processing, external request redirection, or internal proxy throughput.

这里还有一些对于rewrite的作用介绍:

1,首先是满足观感的要求。
对于追求完美主义的网站设计师,就算是网页的地址也希望看起来尽量简洁明快。形如http://www.123.com/news/index.asp?id=123的网页地址,自然是毫无美感可言,而用UrlRewrite技术,你可以轻松把它显示为 http://www.123.com/news/123.html。


2,其次可以隐藏网站所用的编程语言,还可以提高网站的可移植性。 
当网站每个页面都挂着鲜明的.asp/.aspx/.php这种开发语言的标记,别人一眼即可看出你的网站是用什么语言做的。而且在改变网站的语言的时候,你需要改动大量的链接。而且,当一个页面修改了扩展名,它的pagerank也会随之消失,从头开始。我们可以用UrlRewrite技术隐藏我们的实现细节,这样修改移植都很方便,而且完全不损失pagerank。提高安全性,可以有效的避免一些参数名、ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话直接会返回个404或错误页面,这比直接返回500或一大堆服务器错误信息要好的多


3,最后也是最重要的作用,是有利于搜索引擎更好地抓取你网站的内容。
理论上,搜索引擎更喜欢静态页面形式的网页,搜索引擎对静态页面的评分一般要高于动态页面。所以,UrlRewrite可以让我们网站的网页更容易被搜索引擎所收录。

效率

参考这里,主要的一点,url rewrite比redirect更有效率,因为它没有让客户端进行二次请求,而是直接返回了需要的内容,这一点其实有一点像java的forward。

支持

Apache是支持rewrite的,Nginx参考的是apache,所以也是支持的,而java的服务器一直对此没有很好的支持,可能也是源自上面的原因,这里介绍了一个包,来使java的web server可以支持这个rewrite功能。

参考

http://httpd.apache.org/docs/current/mod/mod_rewrite.html
https://visualstudiomagazine.com/blogs/tool-tracker/2018/06/url-rewriting.aspx
http://tuckey.org/urlrewrite/