Apache URLRewriter
URL Rewrite:翻译过来就是网址重写。用了网址重写功能的网站实际有两套网址,一套是表面上的,给访问者和搜索引擎用的,是假的,因为实际上并不存在;还有一套是真实的网址,是真正的幕后工作者,但只有网站管理者才知道。URL Rewrite的作用就是将假网址映射到真网址,换句话说就是欺骗网友,开个玩笑。
那网址重写这有什么用呢?每个使用者的目的都不一样,我也不多说了。
下面举个例子:
比如下面这个手机号码查询网,你输入网址 http://www.abc.biz/13888888888,看上去13888888888是个目录,实际上不是,虽然理论上可以每个手机号创建一个目录,但实际上有很多问题,这里是采用了网址重写功能,实际的真正工作的网址可能是 http://www.abc.biz/mobile.php?no=13888888888,那么当用户访问前者的时候,Apache如何将前者映射成后者呢,就是利用网址重写功能。
至于如何在Apache中启用URL Rewrite功能呢,这里我不罗嗦了,网上有文章有的是,下面我写几个例子,一例胜千言!
例一:
RewriteRule 1\.htm$ 2.htm
用途:将1.htm文件映射成2.htm,当用户请求当前目录下的1.htm文件的时候,Apache实际上读取2.htm的内容,返回给用户,但浏览器地址栏里仍然是1.htm,用户并不知道他看到是2.htm文件的内容。这个例子基本上是个白痴例,但能说明一个问题,就是RewriteRule指令中假网址和真网址的位置,最开始接触RewriteRule的时候,我就搞混过两者的位置。
例二:
RewriteRule (.+)\.htm$ $1.php
用途:将xxx.htm文件映射成xxx.php,反之的写法如下:
RewriteRule (.+)\.php$ $1.htm
上面的两个例子只是通过映射文件后缀名来迷惑别人。
例三:
RewriteRule ^([0-9]+).\htm$ index.php?id=$1
用途:将 xxx.htm 映射成 index.php?id=xxx,其中xxx为纯数字。
例四:
RewriteCond %{http_host} ^shoujihao.biz [NC]
RewriteRule ^(.*)$ http://www.abc.biz/$1 [L,R=301]
用途:将不带www的网址(shoujihao.biz)请求跳转到带www的网址(www.abc.biz)请求。
例五:
RewriteRule ^index.htm$ / [L,R=301]
用途:将对index.htm(比如:http://www.shoujihao.biz/index.htm)的网址请求,跳转到网站默认页面(比如:http://www.shoujihao.biz)