TP中的四种url访问方式

什么是PATHINFO:就是http://localhost/index.php/Home/Index/index/a/1/b/2?c=3中的红色部分,

注意c=3并不是pathinfo的一部分,它是一个query参数。

pathinfo值得是URL的路径实际上不存在的时候,apache或者Nginx等通过一定的手段将不存在的路径,都是实际

不存在路径保存到环境变量$_SERVER['PATH_INFO']中。也可以将它转化为$_GET['s']参数,TP也可以识别。

也就是说当你访问TP项目的时候,你实际上访问的只是入口文件index.php,不管你后面有多长的路径,都是实际不存在的,

转换成PATHINFO或$_GET['s']了而已。

那么THINKPHP就是根据PATHINFO,从中提取出 分组名,模块名 ,方法名 , 以及将剩余的部分转换成为$_GET

变量,比如TP从PATHINFO字符串中提取'Home'字段串,将其保持到

$_GET['g'] , $_GET['m']='Index' ;$_GET['a']='index' ;$_GET['b']=2.可以dump('$_GET')看看。

关于URL详细的解析流程,请看 ThinkPHP/Lib/Core/Dispatcher.class.php 核心类。

 

URL路由:

URL路由--Url Router,指的是,在TP进行常规url解析之前,先检测路由,如果发现有路由规则匹配当前的PATHINFO,那么URL解析则交给路由处理。

路由规则是由多条 rule=>router 规则组成的数组。(规则 =>路由器)

****************************************************************************************************************************************

路由处理过程大概如下:

1.遍历路由规则rule,与当前PATHINFO字符串进行匹配,如果合法,则从PATHINFO中取出所需要的字符串。

2.路由中每条规则对应一个router,router中指定对应的模块以及方法,模块和方法可以用第1步中匹配到的字符串进行动态替代。

3.将剩余的参数都解析并写入到$_GET中。

******************************************************************************************************************************************

设置TP-四种url访问的方式

 

'URL_MODEL' => 1,

 URL访问模式,可选参数0、1、2、3,代表以下四种模式:

0 (普通模式); 

1 (PATHINFO 模式);  /*默认*/

2 (REWRITE 模式); 

3 (兼容模式)    

0:http://localhost/index.php?m=模块&c=控制器&a=操作方法     [get模式]
1:http://localhost/index.php/模块[模块文件夹]/控制器/操作方法    [pathinfo模式]  /*默认*/
2:http://localhost/模块[模块文件夹]/控制器/操作方法     [rewite重写模式]
3:http://localhost/index.php?s=/模块[模块文件夹]/控制器/操作方法  [兼容模式]

*********************************************************************************************************************************************

url的4种访问方式    (这是重点!!)

1.PATHINFO 模式 --重点 在后面使用非常多,如果想传多个参数可以使用键1/值1/键2/值2方法

代码如下:
http://域名/项目名/入口文件/模块名/方法名/键1/值1/键2/值2

2.普通模式也称为重写模式

代码如下:
http://域名/项目名/入口文件?m=模块名&a=方法名&键1=值1&键2=值2

3.REWRITE重写模式,去掉入口文件便于SEO优化

代码如下:
http://域名/项目名/模块名/方法名/键1/值1/键2/值2

4.兼容模式

代码如下:
http://域名/项目名/入口文件?s=模块名/方法名/键1/值1/键2/值2

 

如何修改PATHINFO地址中的/改成-在Home/Conf/config.php中

代码如下:
'URL_PATHINFO_DEPR'=>'-',//修改RUL的分隔符,把地址栏的参数部分/换成:http://域名/项目名/入口文件/模块名-方法名-键1-值1-键2-值2

 

在index.php中开启调用模式,为了在后产模式中不让文件缓存影响开发

代码如下:
define('APP_DEBUG',ture);//如果设置为ture不缓存文件,false则缓存文件

REWRITE模式开启方法

在httpd.conf中查找rewrite_module modules/mod_rewrite.sl 把#去掉重启服务,在入口文件下新建.htaccess.php,重写文件是去掉index.php的意思:

代码如下:
RewriteEngine on  
RewriteCond %{REQUEST_FILENAME} !-d  
RewriteCond %{REQUEST_FILENAME} !-f  
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]

***********************************************************************************************************************************************

路由处理过程大概如下:

1.遍历路由规则rule,与当前PATHINFO字符串进行匹配,如果合法,则从PATHINFO中取出所需要的字符串。

2.路由中每条规则对应一个router,router中指定对应的模块以及方法,模块和方法可以用第1步中匹配到的字符串进行动态替代。

3.将剩余的参数都解析并写入到$_GET中。

************************************************************************************************************************************************

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值