Mod RewriteRule 基本表达规则

在Apache服务器上,我们经常因为URL链接地址的SEO(搜索引擎优化)需要而改写URL形式。如WordPress里的永久链接(Permalinks)的实现就需要这样。利用的就是其Mod Rewrite模块的链接重写功能。链接重写采用的是正则表达式(Regular Expression)来定义匹配规则。下面是经常用到的一些语法规则的含义,我感觉就像是代数表达式。

转义:

\字符 转换特殊字符,用于一些特定的特殊字符的表达,如 [ ] . ( ) \ 等。\ 后的该字符将显示为字符本身,而不是用于句法的参数。

例如,\. 将表示本义的小圆点 . ,而不是后面将要说到的替换内容。

文本:

.    替代任何单个字符(如果只有它自己,则表示整个URI)

[字符]    一类字符:该字符类中的某一个字符

[^字符]    一类字符:不包括于该字符类中的字符

文本1|文本2    两者选一:文本1 或者 文本2

例如,[^/] 匹配除了 / 字符之外的其它任何字符

(foo|bar)\.html 匹配 foo.html 和 bar.html 两个表达

数量:

?    前面紧邻字符的 0 或 1 个

*    前面紧邻字符的 0 或 N 个

+    前面紧邻字符的 1 或 N 个

例如,

(.+)\.html? 可以匹配 foo.htm 和 foo.html 两个表达( ? 前面的一个字符 l 出现1次或不出现(0次))

(foo)?bar\.html 匹配 bar.html 和 foobar.html 两个表达( ? 前面的一个组合(由()控制)出现1次或不出现(0次))

组合:

(文本)  文本的组合

用于设定一个可变范围的边界或者在作为RewriteRule中$n的目标时表达一个后向引用。

例如  ^(.*)\.html foo.php?bar=$1 则$1由前面()内的内容产生。

锚:

^    一行的开始

$    一行的结束

锚明确的定义了与规则相比较的URI字符串的开始(^之后的第一个字符)和结束($之前的最后一个字符)。

例如,

^foo(.*) 可以匹配 foo 和 foobar 但是与 eggfoo 不匹配

(.*)l$ 可以匹配 fool 和 cool,但却不匹配 foo

From http://corz.org/serv/tricks/htaccess2.php

Reference http://httpd.apache.org/docs/2.0/mod/mod_rewrite.html

不是计算机专业的人还真不容易搞明白这些东西,我捉摸了好几天才把那个用于批量匹配搜索mysql数据库文件中大量含日期的链接并替换为另一常量字符串的表达式写出来。

相关文章:

0 Responses to “Mod RewriteRule 基本表达规则”


  • No Comments

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>