当前位置:首页 » 专业资讯
开发技术指南» 文章正文
    引言: 不知道荣兄在什么地方copy的,我从他的blog cp的mod_rewrite模块提 供了一个基于规则的(使用正则表达式分析器的)实时转向URL请求的引擎mod_rewrite模块提 供了一个基于规则的(使用正则表达式分析器的)实时转向URL请求的引擎。
 

 

 ·linux2.6内核驱动移植    »显示摘要«
    摘要:随着linux2.6的发布,由于2.6内核做了教的改动,各个设备的驱动程序在不同程度上要进行改写。为了方便各位linux爱好者我把自己整理的这分 文档share出来。该文当列举了2.6内核同以前版本的绝大多数变化,可惜的是由于时间和精力有限没有详细列出各个函数的用法。 特别声明:该文档中的内容来自http://lwn.net,该网也上也有各个函数的较为详细的说明可供各位参考。如果需要该文档的word版的朋友, 请mail到weiriver@sohu.c......
 ·转 网上看到的java23模式趣解    »显示摘要«
    摘要:factory—追mm少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是mm爱吃的东西,虽然口味有所不同,但不管你带mm去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的factory 1、factory—追mm少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是mm爱吃的东西,虽然口味有所不同,但不管你带mm去麦当劳或肯德基,只管向服务员说“来四个鸡翅”就行了。麦当劳和肯德基就是生产鸡翅的factory 工厂模式:客户类和工厂类分开......


Apache Rewrite
不知道荣兄在什么地方copy的,我从他的blog cp的

mod_rewrite模块提

供了一个基于规则的(使用正则表达式分析器的)实时转向url请求的引擎

mod_rewrite模块提 供了一个基于规则的(使用正则表达式分析器的)实时转向url请求的引擎。 支持每个规则可以拥有不限数量的规则以及附加条件规则的灵活而且强大的url操作机制。 此url操作可以取决于各种测试,比如服务器变量、环境变量、http头、时间标记, 甚至各种格式的用于匹配url组成部分的查找数据库。 【相关文章:延续经典神话 IBM ThinkPad

【扩展阅读:Samba务务器配置手册(呵呵可能不全)

【扩展信息:怎么写Makefile

mod_rewrite模块提 供了一个基于规则的(使用正则表达式分析器的)实时转向url请求的引擎。 支持每个规则可以拥有不限数量的规则以及附加条件规则的灵活而且强大的url操作机制。 此url操作可以取决于各种测试,比如服务器变量、环境变量、http头、时间标记, 甚至各种格式的用于匹配url组成部分的查找数据库。

mod_rewrite模块可以操作url的所有部分(包括路径信息部分), 在服务器级的(httpd.conf)与目录级的(.htaccess)配置都有效, 还可以生成最终请求串。此重写操作的结果可以是内部子处理,也可以是外部请求的转向, 甚至还可以是内部代理处理。

但是,所有这些功能与灵活性带来一个问题,那就是复杂性, 因此,不要指望一天之内就能看懂整个模块。

内部处理

mod_rewrite模块的内部处理极为复杂,但是,为了使一般用户避免犯低级错误, 也让管理员能充分利用其功能,在此仍然做一下说明。

api程序段

首先,你必须了解,apache是通过若干程序段来处理http请求的。 apache api 对每个程序段提供了一个hook程序。 mod_rewrite使用两个hook程序: 其一是,url到文件名的转译hook,用在读取http请求之后,而在授权开始之前; 其二是,修正hook,用在授权程序段与读取目录级配置文件(.htaccess)之后, 而在内容处理器激活之前。

所以,apache收到一个请求并且确定了响应主机(或者是虚拟主机)之后, 重写引擎即开始执行url到文件名程序段,以处理服务器级的配置中所有的mod_rewrite指令。 在最终数据目录确定以后,进入修正程序段并触发目录级配置中的mod_rewrite指令。 这两个程序段并不是泾渭分明的,但都实施把url重写成新的url或者文件名。 虽然api最初不是为此设计的,但它已经成为api的一种用途, 而在apache 1.x 中这是mod_rewrite唯一的实现方法。 记住以下两点,会有助于更好地理解:

虽然mod_rewrite可以重写url为url,重写url为文件名, 甚至重写文件名为文件名,但是目前api只提供一个url到文件名的hook。 在apache 2.0 中,增加了两个丢失hook以使处理过程更清晰。 但是,这样做并没有给用户带来麻烦,只需记住这样一个事实: apache借助url到文件名的hook而比api设计的目标功能更强大。

难以置信的是,mod_rewrite提供了目录级的url操作,即,.htaccess文件, 而这些文件必须在url转换成文件名以后的较多步骤完成之后才会被处理。 这也是必须的,因为.htaccess文件存在于文件系统中,所以处理已经到达这个层面。 换句话说,根据api程序段,这时再处理任何url操作已经太晚了。 为了解决这个鸡与蛋的问题,mod_rewrite使用了一个技巧: 在进行一个目录级的url/文件名的操作时,mod_rewrite先把文件名重写回相应的url (通常这个操作是不可行的,但是参考下面的rewritebase指令就明白它是怎么实现的), 然后,对这个新的url建立一个新的内部的子请求,以此重新开始api程序段的执行。

另外,mod_rewrite尽力使这些复杂的操作对用户全透明,但仍须记住: 服务器级的url操作速度快而且效率高,而目录级的操作由于这个鸡与蛋的问题速度慢效率也低。 但从另一个侧面看,这却是mod_rewrite得以为一般用户提供(局部限制的)url操作的唯一方法。

牢记这两点!

规则集的处理

当mod_rewrite在这两个程序段中开始执行时,它会读取配置结构中的配置好的 (或者是在服务启动时建立的服务器级的,或者是apache核心在遍历目录采集到的目录级的)规则集, 随后,启动url重写引擎来处理(带有一个或多个条件)的规则集。 无论是服务器级的还是目录级的规则集,都是由同一个url重写引擎处理,只是处理结果不同而已。

规则集中规则的顺序是很重要的,因为重写引擎是按一种特殊的(非常规的)顺序处理的, 其原则是:逐个遍历每个规则(rewriterule directives), 如果出现一个匹配条件的规则,则可能回头遍历已有的规则条件(rewriteconddirectives)。 由于历史的原因,条件规则是置前的,所以控制流程略显冗长,细节见figure 1。

figure 1:the control flow through the rewriting ruleset

可见,url首先与每个规则的pattern匹配, 如果匹配不成功,mod_rewrite立即终止此规则的处理,继而处理下一个规则。 如果匹配成功,mod_rewrite寻找响应的规则条件,如果一个条件都没有, 则简单地用substitution构造的新的值来替换url,然后继续处理其他规则。 如果条件存在,则开始一个内部循环按其列出的顺序逐个处理。 对规则的条件的处理有所不同:url并不与pattern匹配, 而是,首先通过扩展变量、反向引用、查找映射表等步骤建立一个teststring的字符串, 随后,用它来与condpattern匹配。如果匹配不成功,则整个条件集与对应的规则失败; 如果匹配成功,则执行下一个规则直到所有条件执行完毕。 如果所有条件得以匹配,则以substitution替换url,并且继续处理。

特殊字符的引用

在apache 1.3.20, teststring and substitution 字符串中的特殊字符可以用前缀的斜杠来实现转义(即,忽略其特殊含义而视之为普通字符)。 比如,substitution可以用$来包含一个美元符号, 以避免mod_rewrite把它视为反向引用。

正则表达式的反向引用能力

这是很重要的一点:一旦在pattern或者condpattern使用了圆括号, 就会建立内部的反向引用,可以使用$n与%n来调用(见下述), 并且,在substitution与teststring中都有效。 figure 2 说明了反向引用被转换扩展的位置。

figure 2: the back-reference flow through a rule.

虽然mod_rewrite内部处理的这个过程是比较杂乱的, 但是了解这些可以帮助你阅读下文中指令的讲述。

环境变量

mod_rewrite模块会跟踪两个额外的(非标准的)cgi/ssi环境变量, script_url与script_uri。 他们包含了当前资源的逻辑的网络状态, 而标准的cgi/ssi变量script_name与 script_filename包含的是物理的系统状态。

注意: 这些变量保持的是其最初被请求时的uri/url, 即, 在任何重写操作之前的。 其重要性在于他们是重写操作重写url到物理路径名的原始依据。

举例

script_name=/sw/lib/w3s/tree/global/u/rse/.www/index.html

script_filename=/u/rse/.www/index.html

script_url=/u/rse/


...   下一页
 ·[转]通过pxe远程安装linux    »显示摘要«
    摘要: http://www.chinaunix.net/jh/4/281547.html无盘linux,阅读指数:8......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE