喜悦国际村 
» 游客:  注册 | 登录 | 统计 | 喜悦证交所 | 帮助

RSS 订阅当前论坛  

【北京】--【低薪】-【诚聘】--- 高级PHP工程师,WEB前台开发工程师

上一主题 下一主题
     
标题: [原创] 友好URL的实现(吐血推荐)  
 
songlv (超级版主)
金牌会员
Rank: 6Rank: 6


UID 73828
精华 0
积分 2057
帖子 661
金钱 2053 喜悦币
威望 0
人脉 4
阅读权限 70
注册 2006-5-22
状态 离线
友好URL的实现(吐血推荐)

大家经常看到别的站的URL是这样的吧?

http://www.xxx.com/module/show/action/list/page/7
或者

http://xx.com/module/show/action/show/id/8.shtml  带扩展名的
或者

http://xx.com/module/show/action/show/id/8?word=ss&age=11
这样的吧


今天我就是公布下这种方法的实现,并独立出最简单的代码

函数如下,没封装成类,主要是没必要,用函数能方便些

<?php

/**
 * 获得友好的URL访问
 *
 * @access  public
 * @return  array
 */
function getQueryString(){
    
$_SGETS =    explode("/",substr($_SERVER['PATH_INFO'],1));
    
$_SLEN    =    count($_SGETS);
    
$_SGET    =    $_GET;
    for(
$i=0;$i<$_SLEN;$i+=2){
        if(!empty(
$_SGETS[$i]) && !empty($_SGETS[$i+1])) $_SGET[$_SGETS[$i]]=$_SGETS[$i+1];
    }

    
$_SGET['m'] = !empty($_SGET['m']) && is_string($_SGET['m']) ? trim($_SGET['m']).'Action' 'indexAction';
    
$_SGET['a'] = !empty($_SGET['a']) && is_string($_SGET['a']) ? trim($_SGET['a']) : 'run';
    return 
$_SGET;
}


/**
 * 生成链接URL
 *
 * @access  public
 * @param   array  $arr 
 * @return  string
 */
function setUrl($arr){
    global 
$Global;
    
    
$queryString='';
    if(
$Global['urlmode']==2){
        foreach(
$arr as $k=> $v){
            
$queryString.=$k.'/'.$v.'/';
        }
    }
    
$queryString.=$Global['urlsuffix'];
    return 
$queryString;
}
?>
使用很简单

<?php
$_GET
getQueryString();
?>
但是这样还不行,这样只能实现

http://www.xxx.com/index.php/module/show/action/list/page/7  这样的

中间多了个index.php 为此我们要把他去掉,只好重写

但是有些文件 又不希望这样,比如 样式 图片,那就放条件里

建立一个 .htaccess文件


RewriteEngine on
RewriteCond $1 !^(index\.php|css|pics|themes|js|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]



现在OK了,赶快去测试吧

<?php
$_GET
getQueryString();
print_r($_GET);
?>
[ 本帖最后由 songlv 于 2008-3-7 04:12 PM 编辑 ]




倾城倾国  
2008-3-7 04:04 PM#1
查看资料  访问主页  Blog  发短消息  顶部
 
lyhiving (lyhiving)
新手上路
Rank: 1
初级会员



UID 29173
精华 0
积分 47
帖子 79
金钱 47 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2004-6-5
状态 离线
[推荐阅读] 金山软件招聘高级PHP程序员[北京]
thinkphp
2008-3-7 06:36 PM#2
查看资料  发短消息  顶部
 
longbill
注册会员
Rank: 2



UID 69845
精华 0
积分 113
帖子 79
金钱 113 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-3-18
状态 离线
[推荐阅读] 海内网诚聘LAMP研发工程师(北京)
codeigniter也是这样实现的。



PHPCMS文件管理器
2008-3-9 04:40 AM#3
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
millken
高级会员
Rank: 4


UID 73040
精华 0
积分 663
帖子 395
金钱 663 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2006-5-9
来自 REFERER
状态 离线
[推荐阅读] 哪里错了呢?
目录层次太深了,对SEO不好。



硬盘挂了,东东丢了.
2008-3-11 12:41 PM#4
查看资料  访问主页  Blog  发短消息  顶部
 
songlv (超级版主)
金牌会员
Rank: 6Rank: 6


UID 73828
精华 0
积分 2057
帖子 661
金钱 2053 喜悦币
威望 0
人脉 4
阅读权限 70
注册 2006-5-22
状态 离线
[推荐阅读] ajax无刷新分页,支持id定位


QUOTE:
原帖由 millken 于 2008-3-11 12:41 PM 发表
目录层次太深了,对SEO不好。
"/"只是一个分割符, 不怕冲突的话可以改成别的 比如 '-',' _'




倾城倾国  
2008-3-11 02:45 PM#5
查看资料  访问主页  Blog  发短消息  顶部
 
k6bar
新手上路
Rank: 1



UID 110114
精华 0
积分 29
帖子 29
金钱 29 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2008-2-14
状态 离线
[推荐阅读] www.iciba.com被黑~哇哈哈~~有图为证哈~现在还打不开
我觉得完全可以不用$_GET了,直接获取URI信息分割一了百了,还可以判断舒服有目录,貌似CI就是这样吧
2008-5-4 02:59 PM#6
查看资料  发短消息  QQ  顶部
 
xieaotian
版主
Rank: 7Rank: 7Rank: 7
老老仙


UID 82205
精华 0
积分 865
帖子 1023
金钱 875 喜悦币
威望 -10
人脉 0
阅读权限 100
注册 2006-10-26
来自 老老神仙部落
状态 离线
[推荐阅读] QQ445676667◆1G独享带宽价格/江苏/浙江/湖南/广东/深圳/吉林/辽宁G口独享
你都吐血了,还推荐个啥呀



http://www.okpython.com
让中国的python发展的更快。
2008-5-5 12:03 PM#7
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
dzjzmj
中级会员
Rank: 3Rank: 3
老会员



UID 25675
精华 0
积分 347
帖子 529
金钱 347 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2004-1-9
来自 福建福州
状态 离线
[推荐阅读] 我的电脑是怎么回事?
不错。。。



PHP代码教程,由你我馔写http://coderhome.net/
2008-5-5 12:41 PM#8
查看资料  访问主页  发短消息  QQ  顶部
 
WitQQ
新手上路
Rank: 1



UID 92439
精华 0
积分 12
帖子 10
金钱 12 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2007-5-3
状态 离线
[推荐阅读] 游戏人间很久没出现了
CI SO

$_SERVER['PATH_INFO'] 哪里来的?

[ 本帖最后由 WitQQ 于 2008-5-5 01:56 PM 编辑 ]
2008-5-5 01:17 PM#9
查看资料  发短消息  顶部
 
WitQQ
新手上路
Rank: 1



UID 92439
精华 0
积分 12
帖子 10
金钱 12 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2007-5-3
状态 离线
[推荐阅读] pd双核 925 1024 80 399


<?php
$path 
= (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : @getenv('PATH_INFO');
?>
2008-5-5 02:04 PM#10
查看资料  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 


Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.027836 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP