开发者社区> usher.yue> 正文

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

简介: 我们在上面的执行过程里面看到的URL是默认情况下,其实ThinkPHP支持四种URL模式,可以通过设置URL_MODEL参数来定义,包括普通模式、PATHINFO、REWRITE和兼容模式。 一、普通模式 :设置URL_MODEL 为0 采用传统的URL参数模式 http:///appName/?m=module&a=action&id=1 普通URL模式和在关闭URL_DISPATCH_ON的情况下面的效果是一样的,只是普通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运行。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
去除thinkphp url中的index.php(web服务器是apache)
例如你的原路径是 http://localhost/yibuzhicheng/ index.php/Index/about.html 那么现在的地址是 http://localhost/yibuzhicheng/Index/about.html
65 0
thinkphp四种url访问方式详解
本文实例分析了thinkphp的四种url访问方式。分享给大家供大家参考。具体分析如下: 一、什么是MVC   thinkphp的MVC模式非常灵活,即使只有三个中和一个也可以运行。 M -Model 编写model类 对数据进行操作 V -View  编写html文件,页面呈现 C -Controller 编写类文件(UserAction.
1276 0
ThinkPHP 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php
原文:ThinkPHP 利用.htaccess文件的 Rewrite 规则隐藏URL中的 index.php URL重写 通常的URL里面含有index.php,为了达到更好的SEO效果可能需要去掉URL里面的index.php ,通过URL重写的方式可以达到这种效果,通常需要服务器开启URL_REWRITE模块才能支持。
1300 0
thinkphp URL规则、URL伪静态、URL路由、URL重写、URL生成(十五)
原文: thinkphp URL规则、URL伪静态、URL路由、URL重写、URL生成(十五) 本章节:详细介绍thinkphp URL规则、URL伪静态、URL路由、URL重写、URL生成 一、URL规则1、默认是区分大小写的 2、如果我们不...
1326 0
thinkPHP四种URL访问方式(二)
原文: thinkPHP四种URL访问方式(二) 四、url的4种访问方式     1.PATHINFO 模式 -- (重点)http://域名/项目名/入口文件/模块名/方法名/键1/值1/键2/值2http://localhost/thinkphp/index.
783 0
thinkphp 3.2.3 入门示例2(URL传参数的几种方式)
原文:thinkphp中URL传参数的几种方式 在thinkphp中,url传参合asp.net中原理类似,下面就单个参数和多个参数传递方式进行一个简单讲解 1.传单个参数  单个参数这种比较简单,例如 想像edit操作里面传递一个id值,如下写法__URL__/edit/id/1 http://localhost/index.php/user/edit/id/1 id和其值1要分别位于/后面 后台获取id通过    $id=$_GET['id']   即可获取其具体值。
1519 0
thinkphp学习笔记6—url模式
原文:thinkphp学习笔记6—url模式   入口文件是应用的唯一入口,因为可以多入口,每个应用可以对应一个入口文件,系统会从rul参数中解析当前请求的模块,控制器,操作。ThinkPHP是区分大小写的,考虑到linux是区分大小写的,所以在ThinkPHP中模块,控制器,模型等都是区分大小写的,并且使用驼峰命名规则。
1239 0
+关注
usher.yue
算法相关技术专家
文章
问答
文章排行榜
最热
最新
相关电子书
更多
WEB浏览器中即将发生的安全变化
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载