研究wordpress程序-第一篇

本人研究wordpress纯属个人喜好,同时也希望通过研究wordpress获得更多的知识。

因个人能力有限,内容会多有不准确的,希望得到读者的指正。接下来我会带领大家从index.php开始研究学习。

版本说明:wordpress 2.6中文版

首先我们打开wordpress文件夹看index.php,很简单,只有两句话。 阅读全文

对“面包屑”及面包屑型网站架构的理解

在WEB开发中经常提到一个词,叫“面包屑”,浅显的看来它只是网站头部下面的一排链接。但深入来看,面包屑却大有用处。

在童话故事“汉泽尔和格雷特尔”中,当汉泽尔和格雷特尔穿过森林时,他们在沿途走过的地方都撒下了面包屑,让这些面包屑来帮助他们找到回家的路。虽然这只是一个孩子们的童话故事,但它却蕴涵了多种含义。实际上,网站设计者亦可从中受到启发:在前台结构上纵深的网站应该采用这种“面包屑型”结构,以足迹的方式呈现用户走过的路径,或者说以层层渐进方式呈现该网页在整个网站架构中所处的位置,从而为用户提供清晰分明的网站导览。

“面包屑型”架构让用户对他们所访问的此页与彼页在层次结构上的关系一目了然。这种网站结构的其中一个最明显的特性体现莫过于返回导览功能。

返回导览不仅可改善网站的实用性,同时亦可提高网站对搜索引擎的友好性。网站的实用性对所有网站来说都是一个非常重要的因素。但遗憾的是, 却并不是所有网站设计者都能够明白这一点。而一旦这一点无法在网站设计中得以贯彻和体现,那么网站的整体性能就不能不让人堪忧了。试想一下,无论访问者是 通过搜索引擎还是别的什么链接进入了某个购物的网页,而这个网页中又没有提供我们所说的“面包屑型”返回导览,当使用者想回到上一层页面寻找其它类似产品 时,只能通过浏览器里的Back功能原路返回。 但是如果有了“面包屑型”返回导览,情况就会变得大大不同。例如上述的购物网页,当使用者发现东西不够满意,他就可以快速回到上一层或直接进入产品目录去 寻找其它的类似页面或产品。 这一点对搜索引擎来说也不例外。提供良好的返回导航连接可帮助搜索引擎更好地检索整个网站。此外,“面包屑型”导航连接中的链接文字还可以增进链接页的搜 索引擎排名。

成功的网站是将主控制权交给对网站的使用者,而不是抓着不放,企图控制使用者浏览的自由。若非如此,则网站显然丧失了对使用者的友好性。 我就见过这样的网站,只有主页上有产品的内部页面链接,所以无论进入哪一个内部页,若想进入别的页面则必须先回到主页。象这样的一个站点,又如何指望使用 者来买他的产品或成为潜在客户呢?

网站的导航结构极之重要。应保证使用者能够通过主站点导航到达网站的每个主要页面, 而次要一些的页面又可以通过访问这些主要的页面来进入,并提供返回上层页面功能。但没必把在每个页面上都放上网站的每个链接。这些规则虽则简单,但却不仅 能为网站的实际访问者,同时还会为搜索引擎提供更好的体验。

除此之外,良好的网站导航还应对使用者“透明”,即使用者能够在网站中来去自如,但又无须经过层层的固定顺序。换言之,可使用平行或互动方式辅助网站导航的线性流程安排。

HTML中标签profile属性的作用

符合数据的轮廓描述
HEAD的profile特定指定了符合数据的轮廓描述的位置.profile特性的值是统一资源定位器.用户代理器可以以两种途径来使用统一资源定位器:
作为唯一的通用的全局的名称.用户代理器可能能够识别这个名称(现在不取回轮廓描述)并且执行一些基于已知轮廓描述约定的进程.例如,搜索引擎可以提供一个在HTML文档目录中搜索的接口,而这些文档对于目录响应均使用相同的轮廓描述.
作为一个链接,用户代理器可能废弃这个统一资源定位,而执行一些在轮廓描述中定义的东东(例如:确定当前HTML中的轮廓描述有效).这份说明书没有定方轮廓描述的格式.
这个例程引用一份假定的轮廓描述来定义有用的文档索引属性.由此轮廓描述定义的属性—包括”作者”,”版权”,”关键词”和”日期”—在后来的META声明中设值.
<HEAD profile=”http://www.acme.com/profiles/core“>
<TITLE>How to complete Memorandum cover sheets</TITLE>
<META name=”author” content=”John Doe”>
<META name=”copyright” content=”© 1998 Acme Corp.”>
<META name=”keywords” content=”corporate,guidelines,cataloging”>
<META name=”date” content=”23 Jan 1998 16:05:31 GMT”>
</HEAD>

优秀产品设计的十条箴言

我从不认为好的产品是偶然设计出来的,我在几乎所有好的产品诞生的背后都找出了一些规律。他们一直影响着我的设计理念,我希望可以和大家共同分享:

1、技术是很重要的,但用户体验更为重要,通常也更难做好。

2、工程师通常都不是好的用户体验设计师,他们喜欢考虑一个事情如何实施,但用户会考虑用起来怎么样。

3、用户体验设计包括交互设计和视觉设计两部分。

4、产品的功能性和用户体验总是交织在一起的。

5、为了创造良好的用户体验,产品方案必须为目标用户量身打造。 阅读全文

优化PHP代码

1.如果一个方法可静态化,就对它做静态声明。速率可提升至4倍。

2.echo 比 print 快。

3.使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接。

4.在执行for循环之前确定最大循环数,不要每循环一次都计算最大值。

5.注销那些不用的变量尤其是大数组,以便释放内存。

6.尽量避免使用__get,__set,__autoload。

7.require_once()代价昂贵。

8.在包含文件时使用完整路径,解析操作系统路径所需的时间会更少。 阅读全文

好的PHP编程习惯

有些人呢不信,信不信呢,由你决定,反正我是信,呵呵。 进入正题:

PS:此篇文章尤其适合正在找工作面试的同志。

1、使用单引号括起来的字符串

当使用双引号来括字符串时,PHP解释器会对其进行变量替换、转义等操作,如“\n”。如果你只想输出一个基本的字符串,就用单引号吧,这样会节省一些资源。当然,如果你需要进行变量替换的,那就必须用双引号了,但其他情况下还是用单引号吧。

2、字符串的输出

你认为以下哪一条语句的运行速度最快?

print “Hi my name is $a. I am $b”;
echo “Hi my name is $a. I am $b”;
echo “Hi my name is “.$a.”. I am “.$b;
echo “Hi my name is “,$a,”. I am “,$b;
echo ‘Hi my name is ‘,$a,’. I am ‘,$b;

也许这看起来很奇怪,但事实上最后一条的运行速度是最快的。print比echo要慢,在字符串中进行变量替换时会慢,而连接字符串要比用逗号 连接来得慢,最后一句则是第一个习惯的体现。所以,不在字符串中进行变量替换不仅会加快程序运行速度,也会让你的代码在任何语法高亮显示的编辑器中显得更 为易懂(变量会被高亮显示出来)。很少人知道echo的参数可以用逗号连接,且速度会比字符串连接要来得快。最后再用上第一个习惯,那这条语句就非常好 了。 阅读全文

做好准备迎接新的平台大战。Google Gears 直指微软领地

Google 在去年五月发布了 Gears, 之后的一年里 Gears 被认为是一个小众产品,只会有很少开发者和用户用它来开发能够离线访问的 web 程序。兴许你还能回想起当年的争论:在到处都有网络连接的情况下,究竟谁需要离线访问功能,而且还没有足够的程序支持,等等。不到一年的时间,就在几周 前,Google 亮出了他的王牌:Gears 助力 MySpace 加速邮件系统。其实 Google 早就加入了这场提供新 web API 的比赛,但是居然一年了都没有人注意到。

将 来的浏览器很可能会变成运行所有程序的虚拟机。在这种情况下,操作系统会变的透明,就像 Adobe 所作的,它的 Flash 技术是现在使用的最普遍、最统一的 web 虚拟机,而微软则要自保(它的利润的来源)了。Google 不隐瞒他们想瞄准并且攻击微软的野心,他们知道,要做到这点的最好方法就是上移一层把操作系统架空,让浏览器成为标准且强劲的应用程序虚拟机。

很难在一片评论里表达清楚 Gears 如何改变并且增加 web 程序的功能。以前使用基于浏览器的 Javascript 脚本,MySpace 中的一些类似邮件列表和排序、根据好友列表过滤这样的功能会让人感觉很慢,而当浏览器向服务器发送多个请求时,进度条还可能会定住,沙漏图标在不停的旋 转。而现在,安装 Gears 只要在确认框点击一下并且等待几秒钟,安装之后,以前让用户抓狂的那些功能现在感觉起来就好象是浏览器自带功能一样。Google 给我们秀了一把 Gears 与 MySpace 集成后的能力,这唤醒了大部分人关注他真正的意图:不再仅是离线浏览,而是直接针对 Adobe 和微软所采取的行动。

截至目前为止,Google 拥有一系列共计 28 个基于 web 的程序, 这些程序在全世界有数百万的用户。Google 开发 web 程序的技术都是基于标准的 HTML、CSS 和 Javascript。选择 Ajax 仅仅是因为这是最好的解决方案,但是 Google 还要做更多以面对现实,那就是每个类似的 web 开发技术体系都是被一个直接竞争者所开发、控制。Google 对开源浏览器 Firefox 的开发给予了强大的支持,并且支持开放 web 标准作为他们的技术体系之选。Google 这么做是因为他们的 web 程序都依赖于开放标准,Firefox 的失败会导致 Internet Explorer 复生并且把 web 的控制权拱手让给微软。

以前,只用基于浏览器的 Javascript 来支持 web 程序对 Google 来说不是个问题。直到竞争者领先一步发布了他们自己的第二代 web 平台,分别是 Flex/AIRSilverlight, 情况才发生了变化。基于 web 的程序在有了类桌面的界面和功能后能够做什么,从这一方面开说,微软和 Adobe 已经超前了一大步。用不了多久,大大小小的竞争者就会使用竞争性技术平台创建竞争性程序,那会使 Google 的产品看起来像是还停留在上个世纪九十年代的样子。

留给 Google 的选择现在很明了了:要么放弃使用基于浏览器的 Javascript 和开放标准进行开发,转而接受新技术中 的一种,要么继续坚持使用核心 web 技术并且发展这些技术直到成为可行的替代技术。Google 的问题是,新标准和预期的浏览器功能很快就会带来富 web 技术,但是开发那些标准的进度却如此缓慢,以至于很可能需要几年时间才能看到那些标准被广泛的应用。新的 HTML 标准,HTML5,特别关注扩展本地浏览器对 web 程序的支持能力,在不用附加私有运行时的情况下。Google web API 的基础就是这些同样的功能以及其他的附加功能。

由于标准开发的极其缓慢,导致通向更快更好,而且仍旧免费开放的 web 程序之路被堵死了,所以 Google 决定通过 Gears 自己进入这个市场。想法其实很简单:把明天的 web 技术带 到今天的浏览器里。这些特定的功能大部分都来自新的 HTML5 规范,但是标准制定小组已经在上面花费了好几年。不想再等这个小组完成规范,Google 自己通过件对浏览器进行扩展,实现了这些功能并且达到了那个小组能达到的最高水平。他们宁愿在短期内抛弃标准(原话是“以后再考虑实现”)也要把他们的 web 程序带到能够对抗 Flash 和 Silverlight 的下一代标准。

Gears 有一个 30 人左右的小组开发,这个小组是 Google 内部开源小组的一部分。这个小组由 Vic Gundotra 带领,再一次讽刺的转变过程中,他由微软的传教士成为 Google 的高级开发者。这个一小组开发者着手进行开发,并且保持 Google 对 Javascript 和开放浏览器虚拟机的兴趣。理论上,他们看起来很可能被大组织或者微软和 Adobe 正在投入各自平台的预算所超过。为了改变这个状况,他们把 Gears 从 Google 中分离出来(字面上也是——现在这个项目名称就只是“Gears”)并且在开源协议下发布源代码。

第一个发行版将只关注于 HTML5 里面提议的新功能中他们认为最重要的功能:基于客户端的结构化数据和对象存储。 由于选择了首先实现客户端存储,所以下一年里 Gears 会被构架成一个离线应用程序解决方案,由于其他的竞争者好像都没有注意到这个这么巨大目标,所以如果他们不是有意而为之,那么肯定会发展的很好。 Google 本来有可能开发他们自己的浏览器,某些博客里的推测和谣言也都指出了这一点,但是浏览器市场竞争激烈,却平淡乏味,而且通常会失败。另外,即使他们开发了 自己的新浏览器,他们还要驱使用户接受这个新浏览器,在决定性的市场聚集起来之前只能等待,就是这样,市场上还会有 70% 或者 80% 甚至 90% 的人不使用 Google 的浏览器,却想使用 Google 的程序。

这种情况下,可选的捷径就是跳过浏览器直接在上面增加一层——Google 自己的 web 层。所有常用浏览器都提供了让开发者扩展功能的机制,这样一来,Google 要做的就是对每个浏览器开发对应的插件。这能让新的 web API 能够适应所有的桌面而不需要用户去适应,最重要的,这比起进入浏览器市场来说见效快而且痛苦少。现在可以让浏览器来做所有无聊的事情:渲染 HTML、显示界面、用户选项等等,与此同时 Google 却在改变现状,埋头向前冲。

现在 Gears 支持大量完整的新功能,有一些新功能是和微软、Adobe 他们的下一代 web API 相同的,而其他的则是 Google 自己创造出来的。现在函数调用已经对开发者开放了,包括后台处理(不会再有沙漏出现)、客户端图像处理、位置感知、更好的文件上传功能,还有浏览器内本地数据库。

要让新 API 和开发平台的应用被采用需要两方面的支持,一方面是用户的支持,因为这需要用户安装新的插件;另一方面是开发者的支持,使用 Gears 不会让开发变得更容易,这是因为这和开发其他的使用基于浏览器的 Javascript 的程序没有区别,Gears 只是给开发者提供了一系列更多的可以在浏览器内实现的功能而已。Javascript 和 web 开发者不需要学习任何新知识,用户也要做的也只是安装一个插件(与浏览器绑定的交易肯定会发生,所以这一步都可以忽略了)。Flash 花了 5 到 6 年才足够普及,能够让开发者有信心专注于使用 Flash 开发,不过有了 Google 的支持,Gears 可能只需要用一半甚至更小的时间就能做到。

在这场竞赛中,Google 没有任何损失反而赢得盆满钵丰,Google 一下子就启动了这个新 web API 的基于标准且开源的替代方案。与其他的竞争对手不一样,Google 没有兴趣控制这个平台或者直接用来盈利。相反他们却在试图维持现状:大部分程序使用浏览器里的 Javascript 开发,如果有更多需求那就使用 Flash 或者类似的技术

上一次平台大战结束了很久了,但是每次你都能看到类似的技术经验:大公司失败,小公司成功。给这个平衡增加点开源的砝码,结果还是没有一个单独的公 司能够占优势。有这么多大公司的加入,而且如此的利益攸关,我们肯定要亲眼见证一场漫长的持久战。只有时间能够告诉我们 Google 的做法能不能带领 web 向前发展。

Google Gears 介绍

Google Gears是一款Google开发的软件,让使用者可以离线上网,但目前仍处于beta阶段。这套软件透过SQLite 数据库让本地端能够把资料暂存起来。所以网页是透过暂存区取得的,而不是从实际的网络上取得。而且,Web 相关的程式可以周期性的透过 Google Gears 将本地暂存的资料与网络上的资料做同步。如果网络暂时无法使用,这个同步过程将会延后,直到网络恢复为止。因此,Google Gears 的 Web 相关应用并不是即时的。

Google Gears是一个自由和开源软件,以BSD 许可证发布 。

简介

Google Gears通过以浏览器扩展的方式添加JavaScript API使得浏览器的脚本能够访问本地的缓存数据库。本扩展仅支援 Firefox 和 Internet Explorer 并需工作于Windows、Mac OS X 或者 Linux 下。当前已有一个能够支援Safari浏览器的开发版。当前,Google Reader 和 Google文件 是Google 仅有的两个能够使用 Google Gears 的程序,然而也有另外的Web程序,例如Remember the Milk已经添加了Google Gears 这个功能。在Google Reader 中,在线模式和离线模式需要认为切换,这主要是由于数据传输过程中有所区别。在别的程序中,例如Remember the Milk,在线模式和离线模式能够无缝切换。

Google Gears有三个主要的API组件:

* 一个本地服务器,用来存储和读取离线程序资源 (包括HTML, JavaScript, images等)。
* 一个小型数据库(以SQLite构建),用来储存本地数据。
* 一个工作池,用来让开发者将本地数据与服务器端后台同步。

支援

通过使用一个Greasemonkey 脚本 created by one of the Google Gears engineers,Google Gears 能够在一些原本不被支持的站点上启用。

正则表达式

一、全部符号解释

\    将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符。例如,’n’ 匹配字符 “n”。’\n’ 匹配一个换行符。序列 ‘\\’ 匹配 “\” 而 “\(” 则匹配 “(“。
^    匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性,^ 也匹配 ‘\n’ 或 ‘\r’ 之后的位置。
$    匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性,$ 也匹配 ‘\n’ 或 ‘\r’ 之前的位置。
*    匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。
+    匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。
?    匹配前面的子表达式零次或一次。例如,”do(es)?” 可以匹配 “do” 或 “does” 中的”do” 。? 等价于 {0,1}。
{n}    n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配 “Bob” 中的 ‘o’,但是能匹配 “food” 中的两个 o。
{n,}    n 是一个非负整数。至少匹配n 次。例如,’o{2,}’ 不能匹配 “Bob” 中的 ‘o’,但能匹配 “foooood” 中的所有 o。’o{1,}’ 等价于 ‘o+’。’o{0,}’ 则等价于 ‘o*’。
{n,m}    m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。例如,”o{1,3}” 将匹配 “fooooood” 中的前三个 o。’o{0,1}’ 等价于 ‘o?’。请注意在逗号和两个数之间不能有空格。
?    当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 “oooo”,’o+?’ 将匹配单个 “o”,而 ‘o+’ 将匹配所有 ‘o’。
.    匹配除 “\n” 之外的任何单个字符。要匹配包括 ‘\n’ 在内的任何字符,请使用象 ‘[.\n]‘ 的模式。
(pattern)    匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 ‘\(‘ 或 ‘\)’。
(?:pattern)    匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用 “或” 字符 (|) 来组合一个模式的各个部分是很有用。例如, ‘industr(?:y|ies) 就是一个比 ‘industry|industries’ 更简略的表达式。
(?=pattern)    正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,’Windows (?=95|98|NT|2000)’ 能匹配 “Windows 2000″ 中的 “Windows” ,但不能匹配 “Windows 3.1″ 中的 “Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)    负向预查,在任何不匹配 pattern 的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如’Windows (?!95|98|NT|2000)’ 能匹配 “Windows 3.1″ 中的 “Windows”,但不能匹配 “Windows 2000″ 中的 “Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始
x|y    匹配 x 或 y。例如,’z|food’ 能匹配 “z” 或 “food”。’(z|f)ood’ 则匹配 “zood” 或 “food”。
[xyz]    字符集合。匹配所包含的任意一个字符。例如, ‘[abc]‘ 可以匹配 “plain” 中的 ‘a’。
[^xyz]    负值字符集合。匹配未包含的任意字符。例如, ‘[^abc]‘ 可以匹配 “plain” 中的’p'。
[a-z]    字符范围。匹配指定范围内的任意字符。例如,’[a-z]‘ 可以匹配 ‘a’ 到 ‘z’ 范围内的任意小写字母字符。
[^a-z]    负值字符范围。匹配任何不在指定范围内的任意字符。例如,’[^a-z]‘ 可以匹配任何不在 ‘a’ 到 ‘z’ 范围内的任意字符。
\b    匹配一个单词边界,也就是指单词和空格间的位置。例如, ‘er\b’ 可以匹配”never” 中的 ‘er’,但不能匹配 “verb” 中的 ‘er’。
\B    匹配非单词边界。’er\B’ 能匹配 “verb” 中的 ‘er’,但不能匹配 “never” 中的 ‘er’。
\cx    匹配由 x 指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 ‘c’ 字符。
\d    匹配一个数字字符。等价于 [0-9]。
\D    匹配一个非数字字符。等价于 [^0-9]。
\f    匹配一个换页符。等价于 \x0c 和 \cL。
\n    匹配一个换行符。等价于 \x0a 和 \cJ。
\r    匹配一个回车符。等价于 \x0d 和 \cM。
\s    匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。
\S    匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t    匹配一个制表符。等价于 \x09 和 \cI。
\v    匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w    匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]‘。
\W    匹配任何非单词字符。等价于 ‘[^A-Za-z0-9_]‘。
\xn    匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长。例如,’\x41′ 匹配 “A”。’\x041′ 则等价于 ‘\x04′ & “1″。正则表达式中可以使用 ASCII 编码。.
\num    匹配 num,其中 num 是一个正整数。对所获取的匹配的引用。例如,’(.)\1′ 匹配两个连续的相同字符。
\n    标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值。
\nm    标识一个八进制转义值或一个向后引用。如果 \nm 之前至少有 nm 个获得子表达式,则 nm 为向后引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文字 m 的向后引用。如果前面的条件都不满足,若 n 和 m 均为八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
\nml    如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\un    匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符。例如, \u00A9 匹配版权符号 (?)。

Nginx重定向[Rewrite]配置及示例 (for zendframework & wordpress & Discuz)

首先Apache的Rewite规则差别不是很大,但是Nginx的Rewrite规则比Apache的简单灵活多了
Nginx可以用if进行条件匹配,语法规则类似C

if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
}

官方文档请点击这里
Rewrite的Flags

Flags can be any of the following:
* last - completes processing of rewrite directives, after which searches for corresponding URI and location
* break - completes processing of rewrite directives
*redirect - returns temporary redirect with code 302; it is used if the substituting line begins with http://
* permanent - returns permanent redirect with code 301

last – 完成重写指令后,搜索相应的URI和位置。相当于Apache里的[L]标记,表示完成rewrite,不再匹配后面的规则。
break – 中止Rewirte,不在继续匹配。
redirect – 返回临时重定向的HTTP状态302。
permanent – 返回永久重定向的HTTP状态301。

ZEND Framework的重定向规则:
案例一:
全部重定向到 /index.php
rewrite ^/(.*) /index.php?$1&amp;;
案例二:
如果文件或目录不存在则重定向到index.php
if (!-e $request_filename) {
rewrite ^/(.*) /index.php?$1&amp;;
}

WordPress的重定向规则:
案例一:
http://www.wemvc.com/12 重定向到 http://www.wemvc.com/index.php?p=12
if (!-e $request_filename) {
rewrite ^/(.+)$ /index.php?p=$1 last;
}

案例二:
与zendframework配置很像
if (!-e $request_filename) {
rewrite ^/(.*) /index.php?$1&amp;;
}

以下为Discuz完整的Rewrite for Nginx规则
if (!-f $request_filename) {
rewrite ^/archiver/((fid|tid)-[\w\-]+\.html)$ /archiver/index.php?$1 last;
rewrite ^/forum-([0-9]+)-([0-9]+)\.html$ /forumdisplay.php?fid=$1&amp;page=$2 last;
rewrite ^/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ /viewthread.php?tid=$1&amp;extra=page%3D$3&amp;page=$2 last;
rewrite ^/space-(username|uid)-(.+)\.html$ /space.php?$1=$2 last;rewrite ^/tag-(.+)\.html$ /tag.php?name=$1 last;
}

文件及目录匹配,其中:
-f和!-f用来判断是否存在文件
-d和!-d用来判断是否存在目录
-e和!-e用来判断是否存在文件或目录
-x和!-x用来判断文件是否可执行

正则表达式全部符号解释
~ 为区分大小写匹配
~* 为不区分大小写匹配
!~和!~* 分别为区分大小写不匹配及不区分大小写不匹配
(pattern) 匹配 pattern 并获取这一匹配。所获取的匹配可以从产生的 Matches 集合得到,在VBScript 中使用 SubMatches 集合,在JScript 中则使用 $0…$9 属性。要匹配圆括号字符,请使用 ‘\(‘ 或 ‘\)’。
^ 匹配输入字符串的开始位置。
$ 匹配输入字符串的结束位置。
学习更多正则知识请查看这里 正则表达式