原帖收藏於IT老兵博客。php
在工做中不斷遇到url rewrite這個概念,這個概念和redirect到底有什麼區別,何時適用,須要總結一下。html
很神奇的是,經過google查這個關鍵字,維基百科的解釋,更多偏向於path info的概念,而不是我所理解的那個概念。java
最先接觸url rewrite是在配置apache服務器的時候,參考這裏,能夠對request的url進行重寫,把實際須要的內容返回給客戶端,而且把客戶端的url改變。web
如下是一些摘錄:express
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.apache
這裏還有一些對於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/