见好多同事都会写正则。那个羡慕嫉妒恨的。于是乎。。我也决定学了,这篇都是从别人上面捡着有用的copy下来的。算是自己总结的吧! (更新中。。)

     URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程

 

    rewrite时服务器变量: 

HTTP headers:HTTP_USER_AGENT, HTTP_REFERER, HTTP_COOKIE, HTTP_HOST, HTTP_ACCEPT 
connection & request: REMOTE_ADDR, QUERY_STRING 
server internals: DOCUMENT_ROOT, SERVER_PORT, SERVER_PROTOCOL 
system stuff: TIME_YEAR, TIME_MON, TIME_DAY

Rewrite规则表达式的说明: 
. 匹配任何单字符 
[chars] 匹配字符串:chars 
[^chars] 不匹配字符串:chars 
text1|text2 可选择的字符串:text1或text2 
? 匹配0到1个字符 
* 匹配0到多个字符 
+ 匹配1到多个字符 
^ 字符串开始标志 
$ 字符串结束标志 
\n 转义符标志

反向引用 $N 用于 RewriteRule 中匹配的变量调用(0 <= N <= 9) 
反向引用 %N 用于 RewriteCond 中最后一个匹配的变量调用(1 <= N <= 9)

RewriteCond标志符 
'nocase|NC'(no case)忽略大小 
'ornext|OR' (or next condition)逻辑或,可以同时匹配多个RewriteCond条件

RewriteRule适用的标志符 

 

     “(.*)”含有两个元素:一是“点”,表示任意字符;二是“星”,表示以前的全部字符。所以(.*)会匹配{REQUEST_URI}的所有字符。
     “/”表示分隔。

     “^”字符表示正则的开始而“$”表示正则的结束。

     “_” 表示允许有空格。

     “[]”中括弧明确我们匹配的正则。

     “[chars]”字符类: "chars"中的任意一个字符。

      “[^chars]”    字符类: 不在"chars"中的字符。

     “text1|text2” 选择: text1 或 text2。

     “-”表示连接的范围。如[a-z]。

     “+”来匹配在该字符之前的一个或者多个字符,避免匹配到空。

     ^/?(?表示匹配字符本身或者前一个字符) 正则开头。为兼容两个版本这样写

     “?”前面的字符出现 0 或 1 次。

     {HTTP_HOST}是一个Apache服务器变量,必须加一个“%”字符再之前,常在RewirteCond中出现。

     “!”开始表示如果正则不匹配那么条件成立。

     “\”转义字符,将其作为一个普通字面字符而不是表示所有字符。比如对".[]()"进行转义,等等

     “.”任意一个字符

      [a-z&&[def]]   d、e 或 f(交集)

      [a-z&&[^bc]]   a 到 z,除了 b 和 c:[ad-z](减去)

      [a-z&&[^m-p]]  a 到 z,而非 m 到 p:[a-lq-z](减去)

 

     例子:

     

  1. T规则: 
  2. RewriteRule ^user/(w+)/?$ user.php?id=$1 
  3.  
  4. 匹配模式: 
  5. ^             输入的开头
  6. user/          以“user/“开始的请求地址 
  7. (w+)        提取所有的字母,并将提取的结果传给$1 
  8. /?             可选的斜线 "/" 
  9. $              输入结束 
  10.  
  11. 替换为: 
  12. user.php?id=   要用到的字符串. 
  13. $1             上面第一个提取到的字符串。