- 1. X-Router超级路由器(支持超多台计算机同时上网的软...
- 2. CrossLoop(实现异地屏幕共享的远程协助工具) V2.80...
- 3. phpMyAdmin(支持对数据库进行建立、复制,删除数据等...
- 4. AirPort Utility for Mac (无线路由管理工具)V5.5....
- 5. AirPort Utility(苹果无线路由管理工具)V5.5.3.2最...
- 6. QuickPHP V1.12.1(php脚本调试工具) 绿色免费版
- 7. RouterPassView(从路由器找回丢失密码的文件 ) V1....
- 8. 菊子曰(实现离线发布博客文章的工具) V4.0 G25 简体...
- 9. apwifi软件无线路由器(提供高效安全的互联网访问) ...
- 10. phpMyAdmin(支持对数据库进行完全操控) V3.4.2.0 F...
关于php url路由的实现
这篇文章提供分享给大家,是关于php url路由的实现,下面的详细的解析,希望对各位有所帮助。
1.符合规则定义的伪静态访问路径解析
对于"test.php/user/lists/normal/id/2.html" 可解析为
control = user,action = lists,filter = normal,order = id,curPage = 3
对于"test.php/users/lists.html" 可解析为
control = user,action = lists,filter = all,order = '',curPage = 1 可取得规则定义中的默认值
2.不符合规则定义的伪静态路径解析
action,control 不符合规则
对于"test.php/users/lists/all/id1/1.html" 报错
试图访问不存在的页面
不符合匹配模式
对于"test.php/user/lists/all/id1/1.html" 可解析为
control = user,action = lists,filter = all,order = '',curPage = 1
可取得不符合匹配模式项目的默认值,上例 order 不符合匹配模式
定义路由规则时可以定义默认值,当在pathinfo中找不到匹配的值,能取得默认值
<?php
// url 路由规则定义
$urlRule = array(
'user' => array( // control
'lists' => array( // action
//'名称' => '默认值,值模式匹配'
'filter' => 'all,^(all|normal|admin)$',
'order' => ',^-?[a-zA-Z_]+$',
'curPage' => '1,^[0-9]+$',
),
),
);
function parseUrl(){
$queryString = array();
$GLOBALS['control'] = 'index';
$GLOBALS['action'] = 'index';
if (isset($_SERVER['PATH_INFO'])){
//获取 pathinfo
$aPathInfo = explode('/', substr($_SERVER['PATH_INFO'], 1, strrpos($_SERVER['PATH_INFO'], '.')-1));
// 获取 control
$GLOBALS['control'] = $aPathInfo[0];
array_shift($aPathInfo);
// 获取 action
$GLOBALS['action'] = (isset($aPathInfo[0]) ? $aPathInfo[0] : 'index');
array_shift($aPathInfo);
// 获取 入口文件名
$GLOBALS['PHP_SELF'] = str_replace($_SERVER['PATH_INFO'], '', $_SERVER['PHP_SELF']);
$queryString = $aPathInfo;
}
parseQueryString($queryString);
}
function parseQueryString(array$aQueryString){
$queryString = array();
// control 与 action 为默认值时
if ($GLOBALS['control'] == 'index' && $GLOBALS['action'] == 'index'){
$GLOBALS['queryString'] = $queryString;
return true;