Apache URLRewriter

canca13年前 (2011-07-23)Apache263

今日折腾网站,不得不用到了Apache 的Rewrite功能,虽说我对正则表达式并不陌生,但这东西学完就忘,忘了再学一样吃力,并且正则表达式只是学习Rewrite的一个方面。半天下来心急火燎,最终事没有办成,最后还是静下心来琢磨,总算蒙混了过去,这里做个备忘,希望对后来的人有所帮助。

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)

相关文章

windows下apache与tomcat整合

jdk1.5.0_04http://java.sun.com/javase/downloads/index_jdk5.jsp在环境变量里面JAVA_HOME=C:\jdk1.5.0_04 tomcat...

授权Apache2 + PHP读写目录权限

摘要:您需要将目录的所有者设置为PHP使用的用户(Web服务器用户)。步骤1:确定PHP用户创建一个包含以下内容的PHP文件:<?php echo `whoami`;&nbs...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。