94hwan-PHP框架基本原理

Source:94hwan 与众不同  Author:网络部
2011-09-20 15:33

    结合公司以往的项目,实际上我们在什么地方应该使用rewrite,都是需要预先规划的,因此没必要在程序内部去控制rewrite功能,因此只保留了要在模板中使用 <{rewrite}>没rewrite前的网址<{/rewrite}>标签进行需要rewrite的url替换。

使用 rewrite 标签,需要自行在 data/rewrite.ini 进行具体的配置,如

  1. # -*- coding: utf-8 -*- 
  2. #----------------------------------------- 
  3. # 需要在 inc_config.php 设置  $GLOBALS['config']['use_rewrite'] = true; 
  4. # Rewrite 规则 
  5. # 用 $1、$2...替换()里的内容 
  6. # 动态的网址规则      替换后网址 
  7. # <中间的分隔符必须大于四个空格> 
  8. #----------------------------------------- 
  9.  
  10. \?ct=([\w]*)&amp;ac=([\w]*)           /ct/$1/ac/$2
  11. \?ct=([\w]*)&ac=([\w]*)               /ct/$1/ac/$2
  12. \?ac=([\w]*)                          /ac/$1
  13. \?ct=([\w]*)                          /ct/$1

     [1] 这里的语法完全是按照preg的正则语法的,有一点不同的是,实际替换时会对 source 网址用 '' 或 "" 进行限制,因此模板里 a href=xx.php?ct=aaa 这类不规范网址是不会被替换的,超链接必须用 "" 或 '' 括起来,这样的好处是对于 javascript('?ct=xx&ac=yy&op=tttt&nn=aaa') 这种不完全符合规则的网址不会被替换。
     [2] \w 在正则里是表示 字母、数字、下划线的组合,在这框架里,还包括 <>、{}、“.” 、$,这样做的目的是识别<{$v.name}>这类的变量,因此,超链接里的模板语法不能出现空格,也不支持if、或其它块类的语法,否则替换不了。
     如:a href='?ac=list&id=<{$v.r.cid}>' 是可以识别的,但 a href='?ac=list&id=<{ if $v.r.cid==1 }1{else}$v.r.cid{/if}>',这种复杂的语法是无法识别的,主要原因是处理html是在解析前之理,而不是输出前(输出前处理无法导致性能下降),如果一定要在网址里用复杂语法的,可以参考“三、关于替换模式”的说明。

   rewrite 仅是对相应规则的网址进行替换,实际的rewrite,还需要自行在服务器里进行定义一遍。

 

...