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

RSS 订阅当前论坛  

$5.95 Web Hosting     

上一主题 下一主题
 25  1/3  1  2  3  > 
     
标题: 把你的网页装饰为伪静态链接  
  本主题被作者加入到他/她的 Blog 中  
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[广告]: 代充Paypal帐号美元
把你的网页装饰为伪静态链接

大家都知道,搜索引擎对动态页面收录不是很好,静态页面在这方面就很有优势。而有些空间不支持rewrite功能。那么可以在每个页面运行下面这个函数。
这样,就可以以http://qh8.net/test/test.php/a/1/b/2/c/3 或http://qh8.net/test/test.php?a=1&b=2&c=3 两种方式访问了。得到的GET变量是一样的。
<?php
function mod_rewrite(){
        if(isset($_SERVER['PATH_INFO'])){
                $url = substr($_SERVER['PATH_INFO'],1);
                $url = explode('/',$url);
                foreach ($url as $key =>$value){
                        if($key%2!=1){
                                if($value!='')$_GET[$value]=$url[$key+1];
                                $querystring[]=$value.'='.$url[$key+1];
                        }
                }
                $_SERVER['QUERY_STRING']=implode("&",$querystring);
                $_SERVER['PHP_SELF']=substr($_SERVER['PHP_SELF'],0,strpos($_SERVER['PHP_SELF'],'.php')+4);
                $_SERVER['REQUEST_URI']=$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];
        }
}

mod_rewrite();
/*例子
http://qh8.net/test/test.php/a/1/b/2/c/3
echo '<pre>';
echo "GET数组如下:<br />";
print_r($_GET);
Array
(
    [a] => 1
    [b] => 2
    [c] => 3
)
*/


?>

[[i] 本帖最后由 qh663 于 2006-6-23 08:09 PM 编辑 [/i]]




五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-6-23 06:43 PM#1
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
kinpoo
注册会员
Rank: 2
初级会员



UID 30794
精华 0
积分 101
帖子 108
金钱 101 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2004-8-30
状态 离线
[广告]: 代充Paypal帐号美元
可是~有的空间连.php/a/1都不支持的~



矛盾是发展的源泉。
2006-6-23 07:49 PM#2
查看资料  访问主页  发短消息  ICQ 状态  顶部
 
姜运涛
金牌会员
Rank: 6Rank: 6


UID 64643
精华 0
积分 1450
帖子 1333
金钱 1449 喜悦币
威望 0
人脉 1
阅读权限 70
注册 2005-6-8
来自 大连
状态 离线
[推荐阅读] 大家平常如何与合作的项目谈价钱?
不是所有空间都支持PATH_INFO的
如果自己有服务器也就不必用PATH_INFO了
不过文章还是很不错的
2006-6-23 08:22 PM#3
查看资料  Blog  发短消息  QQ  Yahoo!  顶部
 
LuckLrj (中国php中的爱因斯坦)
版主
Rank: 7Rank: 7Rank: 7
老会员


UID 64836
精华 0
积分 2320
帖子 3115
金钱 2320 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2005-6-19
状态 离线
[推荐阅读] 鼠标取值
现在没必要弄成那样得了,搜索引擎现在支持动态得了。



学习,工作累了,请访问我的小站,娱乐一下。http://www.52sunny.net
2006-6-23 09:04 PM#4
查看资料  Blog  发短消息  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] 求免费Interspire DevEdit NX!!
绝大多数空间都支持 PATH_INFO的,也有很大部份不支持rewrite。所以,如果服务器不支持rewrite,仿静态是最好的选择。仿静态理由是更好地被收录。以搜索引擎的原理,html页面的检索远远优先于php的QUERY_STRING网页。这个而不影响原来的程序调用,相当于加了一个转义的功能插件。



五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-6-23 09:19 PM#5
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
额系菜屁屁
注册会员
Rank: 2



UID 75274
精华 0
积分 54
帖子 48
金钱 54 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-6-21
状态 离线
[推荐阅读] 请问一下,用phpmyadmin里面的请言包可不可以


<?php

/**
 * $Id$
 * Filename : rewrite.mod.php
 * Author   : 额系菜屁屁
 * Email    : [email]lianxiwoo@gmail.com[/email] | hotmail.com
 * Create   : 200606
 * LastMod  : 2006
 * Usage    : 只需在你所有的页面有输出之前包含此文件即可判断你的环境是否支持 path_info
 *
 * $_SERVER['PATH_INFO_SURPORT'] 为 1 说明环境支持,为 0 不支持
 * $_SERVER['MOD_REWRITE_OPEN']  为 1 说明系统用了 path_info 为 0 说明没有用
*/

//ini_set('display_errors', 1);
//error_reporting(E_ALL ^ E_NOTICE);
//header("Content-Type: text/plain");
//header("Content-type: text/html; charset=UTF-8");


// {{{ 判断是否支持 path_info
if (isset($_GET['testModRewrite']) && $_GET['testModRewrite']){
    if (
str_replace($_SERVER['SCRIPT_NAME'], ''$_SERVER['PHP_SELF'])){
        die(
'1');
    }else{
        die(
'');
    }
}
$a_20060623 strtolower(str_replace(strstr($_SERVER['SERVER_PROTOCOL'], '/'), ""$_SERVER['SERVER_PROTOCOL'])).'://'.$_SERVER['HTTP_HOST'].$_SERVER['SCRIPT_NAME'];
if (
$a_20060623 file_get_contents($a_20060623.'/a/1?testModRewrite=1')){
    
$_SERVER['PATH_INFO_SURPORT'] = 1;
}else{
    
$_SERVER['PATH_INFO_SURPORT'] = 0;
}
unset(
$a_20060623);
// }}}
// {{{
/**
 * 注意:stristr 需要 php5 支持
 *
 * @createtime   20060623
 * @author       屁屁注:此作者还是楼主,我这里只是做个补充,谢谢,^_^
 * @modifiedby   $LastChangedBy:  $
 * @parameter    
 * @return       
 * @throws       none
*/
function mod_rewrite(){
    if(isset(
$_SERVER['PATH_INFO']) && !stristr($_SERVER['SERVER_SOFTWARE'], 'Abyss')){
        
$pi substr($_SERVER['PATH_INFO'], 1);
        
$pi explode('/'$pi);
        
$a sizeof($pi);
        
$qs = array();
        for(
$i 0$i $a$i += 2){
            if (
'' != $pi[$i]){
                
$_GET[$pi[$i]] = $pi[$i+1];
                
$qs[] = $pi[$i].'='.$pi[$i+1];
            }
        }
        
$_SERVER['QUERY_STRING'] = join("&"$qs);
        
$_SERVER['PHP_SELF']     = str_replace($_SERVER['PATH_INFO'], ""$_SERVER['REQUEST_URI']);
        
$_SERVER['REQUEST_URI']  = $_SERVER['PHP_SELF'].($_SERVER['QUERY_STRING'] ? '?'.$_SERVER['QUERY_STRING'] : '');
        
$_SERVER['SCRIPT_URL']   = $_SERVER['PHP_SELF'];
        
$_SERVER['SCRIPT_URI']   = strtolower(str_replace(strstr($_SERVER['SERVER_PROTOCOL'], '/'), ""$_SERVER['SERVER_PROTOCOL'])).'://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
        
$_SERVER['MOD_REWRITE_OPEN']  = 1;
    }else{
        
$_SERVER['MOD_REWRITE_OPEN']  = 0;
    }
}

mod_rewrite();

/**/
echo '<xmp>';
print_r($_SERVER);
echo 
'</xmp>';


// }}}

?>
下面是附件,需要把 .rar 去掉

[ 本帖最后由 额系菜屁屁 于 2006-6-24 01:10 AM 编辑 ]


 附件: 您所在的用户组无法下载或查看附件
2006-6-24 12:58 AM#6
查看资料  Blog  发短消息  顶部
 
qh663
版主
Rank: 7Rank: 7Rank: 7
中级会员


UID 30020
精华 0
积分 546
帖子 580
金钱 546 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2004-7-13
来自 河源
状态 离线
[推荐阅读] 你们些sql语句怎么些写?
原来函数的那句 isset($_SERVER['PATH_INFO']) 就已经检测了是否支持 PATH_INFO 。stristr函数从PHP3就支持了。没看懂 !stristr($_SERVER['SERVER_SOFTWARE'], 'Abyss')这句。

我试了下,在linux服务器下显示
[SERVER_SOFTWARE] => Apache/1.3.33 (Unix) PHP/4.4.2
win服务器下
[SERVER_SOFTWARE] => Apache/2.0.50 (Win32) PHP/5.0.0

呵呵,简单是美。如果对不支持 PATH_INFO 但已经写成的伪静态的话。可以在输出内容之前把链接替换一下就可以了。




五百多篇PHP学习资料
喜悦村BLOG
php团队接兼职项目QQ:80031807
PHP群:768844
2006-6-24 03:26 PM#7
查看资料  访问主页  Blog  发短消息  QQ  顶部
 
额系菜屁屁
注册会员
Rank: 2



UID 75274
精华 0
积分 54
帖子 48
金钱 54 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-6-21
状态 离线
[推荐阅读] 求PHP或ASP开发!


QUOTE:
原帖由 qh663 于 2006-6-24 03:26 PM 发表
原来函数的那句 isset($_SERVER) 就已经检测了是否支持 PATH_INFO 。stristr函数从PHP3就支持了。没看懂 !stristr($_SERVER, 'Abyss')这句。

我试了下,在linux服务器下显示
=> Apache/1.3.33 (Unix) PHP ...
1,stristr 是我记错了,strripos 是 php 5 才支持的,记错,不好意思。

2,Abyss ( http://www.aprelium.com/abyssws/ )是另一个 web 服务器,不管怎么样,打印 $_SERVER['PATH_INFO'] 始终有值,并且跟 SCRIPT_NAME 一样,故有此判断。

3,isset($_SERVER) 只是判断了是否使用了 PATH_INFO ,而不能判断服务器php运行环境是否支持,即开启了 AcceptPathInfo on 这个。on/off,

* $_SERVER['PATH_INFO_SURPORT'] 为 1 说明环境支持,为 0 不支持
* $_SERVER['MOD_REWRITE_OPEN']  为 1 说明系统用了 path_info 为 0 说明没有用

这个即是说明

4,以上程序是建立在的测试结果之上。

5,欢迎继续探讨




http://www.tetx.com/
2006-6-24 04:14 PM#8
查看资料  Blog  发短消息  顶部
 
奶并瓦
该用户已被删除









[推荐阅读] 请教一下:如果经常要把全站HTML重新生成。有什么好对策?
*** 作者被禁止或删除 内容自动屏蔽 ***
2006-6-24 05:09 PM#9
顶部
 
额系菜屁屁
注册会员
Rank: 2



UID 75274
精华 0
积分 54
帖子 48
金钱 54 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2006-6-21
状态 离线
[推荐阅读] 面向对象的class里的初始化和外部的引入问题


QUOTE:
原帖由 奶并瓦 于 2006-6-24 05:09 PM 发表
楼主的代码问题多多
考虑全局变量,你至少少个$a这样的,而且很多人不要$_GET变量,而用$_REQUEST
比如我就喜欢用$_REQUEST的,又时候id不管GET,POST就用$_REQUEST
不是说我吧? 如果不用 get 那么 $_SERVER['MOD_REWRITE_OPEN'] 就为 0 了,就不用这种机制处理了,是吧,使用的时候可以根据 $_SERVER['MOD_REWRITE_OPEN']  这个变量来判断。

这只是一种伪静态的处理方式,当然不是通用、万能的解决方案, 这种方法作为解决某个问题一种方式,我还是比较赞同滴。




http://www.tetx.com/
2006-6-24 07:21 PM#10
查看资料  Blog  发短消息  顶部
 25  1/3  1  2  3  > 
     


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


 




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

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