您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

thinkphp四种url模式介绍

2024/3/1 0:37:50发布28次查看
路由:访问项目中具体某个方法的url地址,简单理解就是url地址
在thinkphp里系统提供了4种路由形式(之前的路由形式:index.php?p=平台&c=控制器&a=方法;pca)
总结:pca为平台、控制器、方法;thinkphp里mca为分组、控制器、方法
①普通形式路由;
②pathinfo形式路由;
③rewrite形式路由;
④兼容形式路由
下面详解
(1)普通形式路由
也叫get形式路由,所有信息通过get传递
路由形式:http://网址/入口文件(index.php)?m=分组&c=控制器名&a=方法&参数名=参数值
例如:访问home分组下的user控制器中的test方法,并传递一个参数id=1
http://www.1336.com/index.php?m=home&c=user&a=test&id=1
可以通过$_get['id']来验证,输出1。所以验证成功
缺点:url传递的东西都会显示出来,既不安全也不好看。所以用的不多
(2)pathinfo()形式路由(thinkphp的默认路由)
路由形式:http://网址/入口文件(index.php)/分组名/控制器名/方法/参数名1/参数值1/参数名n/参数值n
http://www.1336.com/index.php/home/user/test/id/100
方法里有$_get['id'],输出100。所以验证成功
(3)rewrite路由形式(重写)
路由形式:http://网址/分组名/控制器名/方法名/参数1/参数值1/参数n/参数值n
与thinkphp默认的路由形式pathinfo()形式路由的不同之处就是,缺少了入口文件
注意:该路由形式不能直接使用,需要配置完成才能使用
配置步骤:
1. 配置apache下的httpd.conf,开启扩展rewrite重写模块;
2. 修改虚拟主机配置文件,文件位于apache目录下,conf/extra/httpd-vhosts,加上允许重写配置。表示允许重写当前站点
简单说就是给需要开启重写的站点,目录配置处添加allowoverride:all
#针对目录的详细配置 <directory> #允许所有访问 allow from all #允许重写 allowoverride all #表示允许站点显示文件目录结构 options +indexes </directory>
3. 重启apache
4. 将thinkphp压缩包中的.htaccess文件复制到入口文件的同级目录
配置完成后输入网址验证,这里还用上面pathinfo的网址,去掉入口文件后刷新,发现输出100。ok~配置完成
拓展:
php的运行模式(5大运行模式):
cgi模式(通用网关接口);
fastcgi模式(常驻型cgi);
cli(命令行运行);
web模块模式(apache等web服务器运行的模式);
isapi模式(5.3版本后不再支持)
现在用的环境集成包的模式为web模块模式,工作开发中常用fastcgi常驻型模式。
综上,rewrite模式需要apache支持,一般不推荐使用。除了apache外服务器软件还有nginx,lightd等。
(4)兼容路由形式
兼容路由形式结合了普通路由形式、pathinfo路由形式、rewrite路由形式特征
路由形式:http://网址/入口文件?s=/分组名/控制器名/方法名/参数1/参数值1
注意:兼容路由形式只有1个参数:参数名s,后面可以看做s参数值
例如:http://www.1336.com/index.php?s=/home/user/test/id/100,验证输出100,说明访问成功
(5)拓展:thinkphp中路由形式的配置
配置文件thinkphp/conf/convention.php,thinkphp惯例配置文件
/* url设置 */'url_case_insensitive' => true, // 默认false 表示url区分大小写 true则表示不区分大小写'url_model' => 1,
url访问模式,可选参数0、1、2、3,代表以下四种模式:
0 (普通模式);
1 (pathinfo 模式);
2 (rewrite 模式);
3 (兼容模式) 默认为pathinfo 模式
注意:路由形式的配置值,不影响地址栏中输入其他形式路由访问。该配置项的值,影响的是thinkphp系统封装的url组装函数(u函数)生成url地址的形式
thinkphp支持四种url模式,可以通过设置url_model参数来定义,包括普通模式、pathinfo、rewrite和兼容模式。
1、普通模式:'url_model'=>0,
http://servername/appname/?m=module&a=action&id=1
2、pathinfo模式:'url_model'=>1,(系统默认的模式)
默认使用url_pathinfo模式,pathinfo模式还包括普通模式和智能模式两种:
pathinfo普通模式:'path_model'=>1,
该模式url参数没有顺序,例如
http://servername/appname/m/module/a/action/id/1http://servername/appname/a/action/id/1/m/module
pathinfo智能模式:'path_model'=>2, (系统默认的模式)
该模式自动识别模块和操作,例如
http://servername/appname/module/action/id/1/http://servername/appname/module,action,id,1/
智能模式下,第一个参数会被解析成模块名称(或者路由名称,下面会有描述),第二个参数会被解析成操作(在第一个参数不是路由名称的前提下),后面的参数是显式传递的,而且必须成对出现,例如:
http://servername/appname/module/action/year/2000/month/01/day/01/
其中参数之间的分割符由path_depr参数设置,默认为"/",若设置path_depr为"^",则:
http://servername/appname/module^action^id^1/
注意不要使用"@" 和"&"符号进行分割,该符号有特殊用途,可能会导致其他的冲突。
如果想要简化url的形式可以通过路由功能(后面会有描述),在pathinfo模式下,会把相关参数转换成get变量,以及并入request变量,因此不妨碍应用里面的以上变量获取。
3、rewrite模式:'url_model'=>2,
该url模式和pathinfo模式功能一样,除了可以不需要在url里面写入口文件,和可以定义.htaccess 文件外。
例如,我们可以增加如下的.htaccess内容把所有操作都指向index.php文件。
rewriteengine onrewritecond %{request_filename} !-drewritecond %{request_filename} !-frewriterule ^(.*)$ index.php/$1 [qsa,pt,l]
4、兼容模式:'url_model'=>3
兼容模式是普通模式和pathinfo模式的结合,并且可以让应用在需要的时候直接切换到pathinfo模式而不需要更改模板和程序,基本上可以支持任何的运行环境。
只需要传入pathinfo 兼容模式获取变量var_pathinfo,默认值为s,例如
http://servername/appname/?s=/module/action/id/1/
会执行和上面的url等效的操作,并且也可以支持参数分割符号的定义,例如在path_depr设置为"~"的情况下,下面的url有效:
http://servername/appname/?s=module~action~id~1
兼容模式的情况下面模板文件不用做任何更改,保持和pathinfo模式的写法一样,只需要在切换url模式的时候清空下模板缓存目录。
推荐教程:《tp5》
以上就是thinkphp四种url模式介绍的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product