ThinkPHP的URL模式小解
时间:2011-05-09 来源:7K哥
【从OsChina复制过来,最近没怎么写文档,把以前的复制过了,大家将就看看。下面是原文。】
高手直接忽略!
权当笔记吧。最近比较懒,几乎没怎么写代码,也不咋看文档资源。时不时的又忘记了!
ThinkPHP的URL模式有4种。可以在配置文件里设置URL_MODEL的参数来定义普通模式、PATHINFO模式、REWRITE模式以及兼容模式。
一、设置URL_MODEL的参数为0
将采用传统的URL参数模式。例如:http://<serverName>/appName/?m=module&a=action&id=1
普通URL模式和在关闭URL_DISPATCH_ON的情况下效果是一样的,只是普通模式还具有路由功能。如果不需要路由功能,并在使用普通模式的情况下,关闭URL_DISPATCH_ON,效率更高。
二、设置URL_MODEL的参数为1
默认情况使用的是PATHINFO的模式。PATHINFO还根据设置包括普通模式和智能模式两种:
普通模式设置URL_PATHINFO_MODEL的参数为1。这个模式下面的URL参数没有顺序,例如:
http://<serverName>/appName/m/module/a/action/id/1
http://<sercerName>/appName/a/action/id/1/m/module
这两个模式都是等效的。
智能模式则设置URL_PATHINFO_MODEL的参数为2.(系统默认的模式,会自动识别模块和操作)
例如:
http://<serverName>/appName/module/action/id/1
http://<serverName>/appName/module,action,id,1
智能模式下面第一个参数会被解析成模块名称(或者路由名称),第二个参数会被解析成操作(在第一个参数不是路由名称的前提下),后面的参数是显示传递的,必须成对出现。例如:
http://<serverName>/appName/module/action/year/2008/month/09/day/21/其中参数直接的分割符号通过设置URL_PATHINFO_DEPR参数,默认是“/”,假如设置为“-”可以使用下例的URL访问。(但不要使用“.”和“&”符号进行分割,该符号有特殊用途)
http://<serverName>/appName/module-action-id-1/
在PATH_INFO模式下面,会把相关的参数转化为GET变量,以及并入REQUEST变量。不反感URL里面的GET和REQUEST变量获取。
三、设置URL_MODEL的参数为2
该模式和PATHINFO模式功能一样。除了可以不需要再URL里面写入口文件,和可以定义.htaccess文件外。在开启了Apache的URL_REWRITE模块后,就可以启用REWRITE模式。
四、设置URL_MODEL参数为3
例如:http://<serverName>/appName/?s=/module/action/id/1/
并且可以支持参数分隔符号定义,设置URL_PAYHINFO_DEPR的参数为~,下面的URL也有效。
http://<serverName>/appName/?s=module~action~id~1
这是利用了VAR_PATHINFO的参数,用普通模式的实现模拟了PATHINFO模式。但兼容模式不需要自己传s变量,而是由系统自动完成URL部分,兼容模式可以和PATHINFO模式直接切换,并不需要改模板文件里面的URL地址连接。