URL路由网址详解

一、URL路由网址说明

引导文件为:index.php,若web服务器软件为Apache时,.htaccess文件也算作引导文件。DoitPHP框架由引导文件来处理客户提交的网址。如: http://www.example.com/index.php/post/show。DoitPHP框架支持两种模式的网址访问,一种为路由模式,默认为路由模式;另一种为标准模式(普通传统模式),标准模式的网址对web服务器兼容较好(并不是所有的web服务器软件都支持路由网址。如:微软的IIS)。

路由模式的网址为:/index.php/控制器/Action类方法/参数名1/参数1/参数名2/参数2

相当于标准模式的网址:/index.php?router=控制器/Action类方法&参数名1=参数1&参数名2=参数2

通过上面实例不难区分路由模式与标准模式的网址两者之间的差别。也许你会问:路由模式与标准模式这两种网址如何切换呢?前面文档有篇:配置文件使用说明中 urlFormat 关于这个内置参数的说明先仔细看一下。切换方法:打开主配置文件application.php,找到如下代码

//$config['application']['urlFormat'] = Configure::GET_FORMAT;

将前面的注释符去掉,即可支持标准模式的网址访问。将注释符加上即可支持路由模式网址访问。两者不可得兼,要么统一使用路由模式,要么统一使用标准模式。

当开启Rewrite功能时,/index.php可以省略

网址的模式则为:/控制器/Action类方法/参数名1/参数1/参数名2/参数2。

如果对于 /参数名1/参数1/参数名2/参数2 这种URL参数赋值方式不习惯。也可以采用:/控制器/Action类方法/?参数名1=参数1&参数名2=参数2。

注:/控制器/Action类方法/参数名1=参数1&参数名2=参数2 这种URL是错误的因为参数名1前少了个“?”,系统则视“参数名1=参数1&参数名2=参数2”为一个参数名。


二、URL路由网址的自定义

随着Nginx的广泛使用,Nginx的Rewrit功能相当强悍,其Rewrite规则编写也较为简单,所以由服务器低层能解决的问题,就没有必要拿到PHP的层面来进行实现。所以从DoitPHP V2.3起,对URL路由网址自定义功能进行大刀阔斧的删减。目前在路由网址自定义方面,仅支持网址分割符的自定义。

网址分割符默认为"/",如果网址/product/list/page/12,您认为目录太多,您想简化一下实现/product-list-page-12这样的网址,只需将分割符自定义为“-”,就可以了。具体设置参见前面文档:配置文件的使用说明中关于urlSegmentation这个内置参数的详细说明。不过话又说回来,自定义网址分割符在实际开发中,真的不多见。一般情况下用不到。

三、URL路由网址的组装

如果这里有:controller为demo, method为testAction类方法,参数名为page, 参数为23。有这些信息,如何得到一个URL路由网址,这里要调用Controller的一个方法:createUrl();操作如下:

echo $this->createUrl('demo/test', array('page'=>23));
或
echo $this->createUrl('demo/test') . '/?page=23';

则可以输出所要得到的网址了(关于createUrl方法,以后将会有详细的讲述)。