php访问地址与路由,路由和URL的区别与联系

URL模式

在营销推广的过程中,域名的网站后面的长短是多人很注意的,越短越好,但是Thinkphp域名的参数非常长,普通模式就更长了,如何改短呢,ThinkPHP支持的URL模式有四种:普通模式、PATHINFO、REWRITE和兼容模式,

1,设置URL模式

623b7679546c7f8217590992a0a2ab10.png

2,设置为0,为普通模式,也就是传统的GET传参方式来指定当前访问的模块和操作,访问地址则变成: http://www.huthon.com/?module=home&controller=user&action=login&var=value

m参数表示模块,c参数表示控制器,a参数表示操作(当然这些参数都是可以配置的),后面的表示其他GET参数。

设置为1为PATHINFO模式 最常见模式,PATHINFO模式是系统的默认URL模式,提供了最好的SEO支持PATHINFO地址的前三个参数分别表示模块/控制器/操作。

访问地址是: http://www.huthon.com/index.php/home/user/login/var/value/

http://serverName/index.php/模块/控制器/操作

设置为2为REWRITE模式 省略了index.php; 是在PATHINFO模式的基础上添加了重写规则的支持,可以去掉URL地址里面的入口文件index.php,但是需要额外配置WEB服务器的重写规则。 如果是Apache则需要在入口文件的同级添加.htaccess文件访问地址是: http://www.huthon.com/home/user/login/var/value/

设置为3,为兼容模式,是用于不支持PATHINFO的特殊环境访问地址是: http://www.huthon.com/?s=/home/user/login/var/value

ThinkPHP框架的URL是区分大小写(主要是针对模块、控制器和操作名,不包括应用参数)的,这一点非常关键,因为ThinkPHP的命名规范是采用驼峰法(首字母大写)的规则,而URL中的模块和控制器都是对应的文件,因此在Linux环境下面必然存在区分大小写的问题。

框架内置了一个配置参数用于解决URL大小写的问题,如下:

'URL_CASE_INSENSITIVE'  =>  true,

当URL_CASE_INSENSITIVE设置为true的时候表示URL地址不区分大小写,这个也是框架在部署模式下面的默认设置。

当开启调试模式的情况下,这个参数是false,因此你会发现在调试模式下面URL区分大小写的情况。

路由

简单的说,URL 路由就是允许你在一定规则下定制你需要的 URL 样子,以达到美化 URL ,提高用户体验,也有益于搜索引擎收录的目的。

要使用路由功能,前提是你的URL支持PATH_INFO(或者兼容URL模式也可以,采用普通URL模式的情况下不支持路由功能),并且在应用(或者模块)配置文件Conf/config.php中开启路由

'URL_ROUTER_ON'=>true,

路由规则定义

与 2.x 版本不同,3.0 路由规则定义于项目配置文件 config.php 内,格式为数组格式,具体定义规则又分为规则路由和正则路由。规则路由语法如下:

格式1:'路由规则'=>'[分组/模块/操作]?额外参数1=值1&额外参数2=值2...'

格式2:'路由规则'=>array('[分组/模块/操作]','额外参数1=值1&额外参数2=值2...')

格式3:'路由规则'=>'外部地址'

格式4:'路由规则'=>array('外部地址','重定向代码')

语法说明

路由规则即是我们要在 URL 中显示出来规则,后面元素值部分是实际的 URL 地址及参数

路由规则中如果以 : 开头,表示动态变量,否则为静态地址

格式2的额外参数可以传入数组或者字符串

路由规则支持变量的数字约束定义,例如:'product/:id\d'=>'Products/Show'

路由规则非数字变量支持排除,例如 'news/:cate^add|edit|delete'=>'News/category'

路由规则支持完整匹配定义,例如:'product/:id\d$'=>'Products/Show'

路由规则中的静态地址部分不区分大小写

外部地址中如果要引用动态变量, 采用 :1、:2 的方式

规则路由可以支持 全动态和动静结合定义,例如 ':user/blog/:id'=>'Home/Blog/user'

这些规则及语法说明比较晦涩难懂,下面会有实例来对照以便理解上述路由规则及语法说明。

如果在配置文件里定义了路由开启功能,系统在执行 Dispatch 解析的时候,会判断当前 URL 是否存在定义的路由名称,如果有就会按照定义的路由规则来进行 URL 解析。

ThinkPHP URL 路由实例

以本文开始的例子为例,看该路由是如何定义的。在项目配置文件 Conf/config.php 里定义如下规则:

//路由定义

'URL_ROUTE_RULES'=> array(

'product/:category\d/:id\d'=>'Products/Show', //规则路由

),

当我们访问如下这个地址的时候:

http://www.5idev.com/index.php/product/5/123

会将该地址解析到 Products 模块的 Show 操作,并传入 get 参数 category=5&id=123。

如果有额外的固定参数,如 status=1,可以定义路由:

'product/:category\d/:id\d'=>'Products/Show?status=1', //规则路由

也即匹配下面这个 URL 地址:

http://www.5idev.com/index.php/product/5/123/1

上面都是按格式1来定义的路由,在有额外参数的情况下,可以转换为第2种定义格式:

'product/:category\d/:id\d'=>array('Products/Show','status=1')

上面的路由规则中 \d 表示只匹配数字,当不加此约束时,则可匹配所有字符,这也是默认情况。如果要严格约定传入的参数格式,请使用正则路由定义规则。

路由格式:外部地址

对于路由格式 3 和格式 4,则是检测到匹配的路由格式,则跳转到外部地址,区别是格式 4 有重定向代码,如 301 代表永久重定向。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值