在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 不匹配,即要求从 ^ 之后的第一个字符开始匹配,而这里 (.*) 表示任意字符串,那么只要包含 foo 这样的字符串就可以被匹配。
(.*)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数据库文件中大量含日期的链接并替换为另一常量字符串的表达式写出来。©
本文发表于水景一页。永久链接:<http://cnzhx.net/blog/very-basic-regexp-of-mod-rewrite-rule/>。转载请保留此信息及相应链接。
引用通告: Google XML Sitemaps与WordPress 多站点(Multisite) « 水景一页
引用通告: 在wordpress mu中使用Google XML Sitemaps - ORZ部落閣
引用通告: 屏蔽一些不友好的蜘蛛 | 水景一页