Url Rewrite问题

#1 xcabc

上午,看到有关SpeedPHP的相关信息,到官网看了手册和代码,总体觉得SP还是很不错的,首先不是很复杂,其次是功能也比较全,最后是提供了很好的扩展空间。对初学者和做中小型项目都是一个很好的框架工具。正好手头上需要做一个项目,初步看了SP,觉得比较适合。唯一不确定就是对Url Rewrite的实现,如demo.html?arg1&arg2,/controller/action.html/key1/val1...等url的rewrite,感觉还是不尽如人意。
在此,希望Jake能给如下一个比较好的解决方案:
1、对同一项目中,对不同的应用定制不同的urlrewrite方案,如app1,app2
2、应用中不以controller或action区分url,而改用自然人性化的url,如
app1有分类显示和内容显示
  app1/cat/[id] spURL=> app1/controller_cat/show/id/[id]
  app1/[infoid]  spURL=> app1/controller_info/view/id/[infoid]
  app2/areaid/catid/infoid.html spURL=>app2/controller/show/areaid/[aid]/catid/[cid]/infoid/[infoid]
以上spURL为sp对照生成的URL。
也就是说,如果要sp生成更加灵活和人性化的URL,现在通用urlrewrite扩展肯定不能满足要求。
我该如何基于SP,设计挂接点,何时进行rewrite,怎样通过配置解析和生成url等。谢谢!

2010-05-31 12:52:55

#2 jake

这里可以先看看官方的spUrlRewrite这个扩展的实现,其实URL这块包括两部分,一个是对路由的分析和赋值,一个是通过spUrl生成的地址。只要你自己做的urlrewrite扩展有这两部分的处理,即可做出个性化的rewrite。

一、在spUrlRewrite里面可以看到,setReWrite方法是对路由进行判断的,就是通过$_SERVER["REQUEST_URI"]等获得当前访问的地址,通过你自己定义的方式去匹配,最终赋值给
$__controller(目标控制器),$__action(目标动作),spClass("spArgs")->set()(从地址而来的参数)

二、getReWrite是对spUrl函数进行变化的方法,通过对参数$urlargs的各种匹配转换,最终返回一个url。

以上两步完成后,就可以有一个新的UrlRewrite类了,是比较适合某个项目的那种,甚至可以放入隐藏的参数等等。

2010-05-31 15:23:25