喜悦国际村 » 喜悦原创 » 友好URL的实现(吐血推荐)

页: [1]
songlv2008-3-7 08:04 AM
友好URL的实现(吐血推荐)

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

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

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

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


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

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

<?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]

使用很简单
[php]
<?php
$_GET= getQueryString();
?>
[/php]

但是这样还不行,这样只能实现

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

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

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

建立一个 .htaccess文件


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



现在OK了,赶快去测试吧


[php]

<?php
$_GET= getQueryString();
print_r($_GET);
?>

[/php]

[[i] 本帖最后由 songlv 于 2008-3-7 04:12 PM 编辑 [/i]]

lyhiving2008-3-7 10:36 AM
thinkphp

longbill2008-3-8 08:40 PM
codeigniter也是这样实现的。

millken2008-3-11 04:41 AM
目录层次太深了,对SEO不好。

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

k6bar2008-5-4 06:59 AM
我觉得完全可以不用$_GET了,直接获取URI信息分割一了百了,还可以判断舒服有目录,貌似CI就是这样吧

xieaotian2008-5-5 04:03 AM
你都吐血了,还推荐个啥呀;P

dzjzmj2008-5-5 04:41 AM
不错。。。

WitQQ2008-5-5 05:17 AM
CI SO

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

[[i] 本帖最后由 WitQQ 于 2008-5-5 01:56 PM 编辑 [/i]]

WitQQ2008-5-5 06:04 AM
[php]$path = (isset($_SERVER['PATH_INFO'])) ? $_SERVER['PATH_INFO'] : @getenv('PATH_INFO');[/php]

terry8310102008-5-22 09:49 AM
哈哈 , 不错哦 ,  感谢 , 收藏了!

ccxxcc2008-5-23 01:05 AM
你都都有权限Rewrite了,还在代码上做URL,直接用Rewrite不就可以了么,想写成啥样不行呀?

maxyma2008-5-23 03:47 AM
呵呵 吐血 tp的风格

Sanders2008-5-23 02:50 PM
回复 #10 WitQQ 的帖子

能不能像 [url]http://www.xxx.com/show/list/7[/url] 这样子。
CI貌似就是这样,不过后面的参数需要自己记好顺序

[[i] 本帖最后由 Sanders 于 2008-5-23 10:56 PM 编辑 [/i]]

xlight992008-6-23 02:05 PM
不错 呵呵

daiermimi2008-7-3 07:44 AM
这种写法不怎么样的,去年我也这样实现,现在有点变化了
改用zendframework,用路由来实现更漂亮的url

pass29362008-7-4 01:24 AM
继续关注.................

gouki2008-7-8 05:30 AM
旁观这种东西

风卷残云2008-7-22 01:05 PM
设置webserver:
DefaultType application/x-httpd-php

保存index.php为index, 去掉文件类型, 然后就可以:

[url]http://www.xxx.com/index/module/show/action/list/page/7[/url]


查看完整版本: 友好URL的实现(吐血推荐)


Powered by Discuz! Archiver 6.1.0  © 2001-2006 Comsenz Inc.
Processed in 1.963889 second(s), 2 queries