thinkphp的四种控制器URL访问方式

我们在上面的执行过程里面看到的URL是默认情况下,其实ThinkPHP支持四种URL模式,可以通过设置URL_MODEL参数来定义,包括普通模式、PATHINFO、REWRITE和兼容模式。

一、普通模式 :设置URL_MODEL 为0

采用传统的URL参数模式

http://<serverName>/appName/?m=module&a=action&id=1

普通URL模式和在关闭URL_DISPATCH_ON的情况下面的效果是一样的,只是普通URL模式还具有路由功能。如果你并不需要使用路由功能,而且还在使用普通模式的话,建议直接关闭URL_DISPATCH_ON,效率会更高。

二、PATHINFO模式 :设置URL_MODEL 为1

默认情况使用PATHINFO模式,ThinkPHP内置强大的PATHINFO支持,提供灵活和友好URL支持。PATHINFO模式根据不同的设置还包括普通模式和智能模式两种:

普通模式 设置URL_PATHINFO_MODEL参数为1

该模式下面URL参数没有顺序,例如

http://<serverName>/appName/m/module/a/action/id/1

http://<serverName>/appName/a/action/id/1/m/module

以上URL等效

智能模式 设置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_PATHINFO_DEPR为“-”的话,就可以使用下面的URL访问

http://<serverName>/appName/module-action-id-1/

注意不要使用”:” 和”&”符号进行分割,该符号有特殊用途。

略加修改,就可以展示出富有诗意的URL,呵呵~

如果想要简化URL的形式可以通过路由功能(后面会有描述)以及空模块和空操作。

在PATH_INFO模式下面,会把相关参数转换成GET变量,以及并入REQUEST变量,因此不妨碍URL里面的GET和REQUEST变量获取。

三、REWRITE模式: 设置URL_MODEL 为2

该URL模式和PATHINFO模式功能一样,除了可以不需要在URL里面写入口文件,和可以定义.htaccess 文件外。在开启了Apache的URL_REWRITE模块后,就可以启用REWRITE模式了,具体参考下面的URL重写部分。

四、兼容模式: 设置URL_MODEL 为3

兼容模式是普通模式和PATHINFO模式的结合,并且可以让应用在需要的时候直接切换到PATHINFO模式而不需要更改模板和程序。兼容模式URL可以支持任何的运行环境。

兼容模式的效果是:

http://<serverName>/appName/?s=/module/action/id/1/

并且也可以支持参数分割符号的定义,例如在URL_PATHINFO_DEPR为~的情况下,下面的URL有效:

http://<serverName>/appName/?s=module~action~id~1

其实是利用了VAR_PATHINFO参数,用普通模式的实现模拟了PATHINFO的模式。但是兼容模式并不需要自己传s变量,而是由系统自动完成URL部分。正是由于这个特性,兼容模式可以和PATHINFO模式之间直接切换,而不需更改模板文件里面的URL地址连接。

某些服务器环境不能良好的支持PATHINFO,或者需要进行额外的配置才可以支持,如果你确认你的服务器环境不支持PATHINFO,可以选择普通模式或者兼容模式URL运行。

时间: 2024-11-14 12:22:44

thinkphp的四种控制器URL访问方式的相关文章

thinkPHP四种URL访问方式(二)

原文:thinkPHP四种URL访问方式(二)四.url的4种访问方式     1.PATHINFO 模式 -- (重点)http://域名/项目名/入口文件/模块名/方法名/键1/值1/键2/值2http://localhost/thinkphp/index.php/Index/indexhttp://localhost/thinkphp/index.php/Index/add/name/leyangjun   ---传参(也支持通用的模式?name=leyangjun)2.普通模式http:

thinkphp四种url访问方式详解_php实例

本文实例分析了thinkphp的四种url访问方式.分享给大家供大家参考.具体分析如下: 一.什么是MVC   thinkphp的MVC模式非常灵活,即使只有三个中和一个也可以运行. M -Model 编写model类 对数据进行操作 V -View  编写html文件,页面呈现 C -Controller 编写类文件(UserAction.class.php) 二.ThinkPHP的MVC特点    (简单了解) 三.ThinkPHP的MVC对应的目录  (简单了解) M 项目目录/应用目录/

常见的四种POST 提交数据方式(小总结)_php技巧

HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中,POST 一般用来向服务端提交数据,本文主要讨论 POST 提交数据的几种方式. 我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范.规范把 HTTP 请求分为三个部分:状态行.请求头.消息主体.类似于下面形式: <method> <request-URL> <version&

java正则表达式四种常用的处理方式(匹配、分割、替代、获取)_正则表达式

java 正则表达式高级篇,介绍四种常用的处理方式:匹配.分割.替代.获取,具体内容如下 package test; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 正则表达式 * 正则表达式 的用法主要是4种方面的使用 * 匹配,分割,替换,获取. * 用一些简单的符号来代表代码的操作 * @author cyc * */ public class Rex { public static void ma

详解IOS四种保存数据的方式_IOS

在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍一下数据保存的方式: 1.NSKeyedArchiver:采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法.前一个方法告诉系统怎么对对象进行编码,而后一个方法则是告诉系统怎么对对象进行解码.例如对Possession对象归档保存.

四种Android数据存储方式_Android

Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在"data/data/程序包名"目录下.如果要实现数据共享,正确的方式是使用ContentProvider.  SharedPreferenceSharedPreference是一种轻型的数据存储方式,实际上是基于XML文件存储的"key-value"键值对数据.通常用来存储程序的一些配置信息

四种Android数据存储方式

Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在"data/data/程序包名"目录下.如果要实现数据共享,正确的方式是使用ContentProvider. SharedPreference SharedPreference是一种轻型的数据存储方式,实际上是基于XML文件存储的"key-value"键值对数据.通常用来存储程序的一些配置信息

NIST划分云计算系统部署的四种方式解析

NIST将云计算系统部署分别划分为私有云.社区云.公有云和混合云,通过具体解析发现这种方式是一个很明智的做法,这样做可以让大家统一认识,避免混乱,否则会出现越来越多的新的"XXX Cloud"的泛滥(如个人云.HPC云.科教云.企业云等). 私有云(http://www.aliyun.com/zixun/aggregation/33969.html">Private Cloud) 云基础设施被某单一组织拥有或租用,可以坐落在本地(on Premise)或(防火墙外的)异

Android开发之基本控件和四种布局方式详解_Android

Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方式Android和iOS还是区别挺大的,在iOS中有Frame绝对布局和AutoLayout相对布局.而在Android中的布局方式就比较丰富了,今天博客中会介绍四种常用的布局方式.先总结一下控件,然后再搞一搞基本方式,开发环境还是用的Mac下的Android Studio.开始今天的正题, 虽然A