免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7289 | 回复: 1
打印 上一主题 下一主题

问一个关于URL模式匹配的问题 [复制链接]

论坛徽章:
6
CU大牛徽章
日期:2013-05-20 10:43:41IT运维版块每日发帖之星
日期:2016-07-29 06:20:00IT运维版块每日发帖之星
日期:2016-01-27 06:20:00CU大牛徽章
日期:2013-05-20 10:44:16CU大牛徽章
日期:2013-05-20 10:44:0615-16赛季CBA联赛之广东
日期:2018-03-09 11:17:08
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-30 11:19 |只看该作者 |倒序浏览
我想做一个由用户灵活配置的URI程序,也就是说有三个域(暂且这么说吧){action},{method},{params},可以随意组合成一个URI,当然每个域只出现一次或0次,
{action}、{method}可由字母下划线组成,{params}可以由URL支持的字符组成。具体如下:

1. /{action}/{method}/{params}   
e.g: /product/list/p/2

2. /{action}_{method}_{params}
e.g: /product_list_p2

3. /{action}-{method}-{params}
e.g: /product-list-p2

4. /{action}_{method}_{params}.(html|htm)
e.g: /product_list_p2.html

5. /{action}-{method}-{params}.(html|htm)
e.g: /product-list-p2.html

6. /{action}/{method}-{params}
e.g: /product/list-p2

7. /{action}/{method}?{params}
e.g: /product/list?p=2&_t=19383938439

8. etc.

简单描述: {action}、{method}不言而喻就是分别映射到Action类和Action类中的方法,{params}主要是用get方法提交的参数。

我想问的是,有没有什么好的方法实现?大家一起来讨论讨论哈!

论坛徽章:
0
2 [报告]
发表于 2013-09-14 10:54 |只看该作者
THINKPHP是这样写的


$paths = explode($depr,trim($_SERVER['PATH_INFO'],'/'));
                if(C('VAR_URL_PARAMS')) {
                    // 直接通过$_GET['_URL_'][1] $_GET['_URL_'][2] 获取URL参数 方便不用路由时参数获取
                    $_GET[C('VAR_URL_PARAMS')]   =  $paths;
                }
                $var  =  array();
                if (C('APP_GROUP_LIST') && !isset($_GET[C('VAR_GROUP')])){
                    $var[C('VAR_GROUP')] = in_array(strtolower($paths[0]),explode(',',strtolower(C('APP_GROUP_LIST'))))? array_shift($paths) : '';
                    if(C('APP_GROUP_DENY') && in_array(strtolower($var[C('VAR_GROUP')]),explode(',',strtolower(C('APP_GROUP_DENY'))))) {
                        // 禁止直接访问分组
                        exit;
                    }
                }
                if(!isset($_GET[C('VAR_MODULE')])) {// 还没有定义模块名称
                    $var[C('VAR_MODULE')]  =   array_shift($paths);
                }
                $var[C('VAR_ACTION')]  =   array_shift($paths);
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP