问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

php静态化页面方法,伪静态的也可以

发布网友 发布时间:2022-04-22 09:34

我来回答

5个回答

热心网友 时间:2022-04-22 11:03

PHP伪静态写法--其一
伪静态又名:URL重写
主要是为了SEO而生的。(SEO是什么?这个不用问我吧。呵呵~搞网络的不懂SEO那就~~~~)
方法一:
比如这个网页
http://www.2cto.com /soft.php/1,100,8630.html
其实处理的脚本是soft.php 参数为1,100,8630
相当于soft.php?a=1&b=1=100&c=8630 只不过这样的URL太难记。搜索引擎也不喜欢。
真静态只是完全生成了HTML。
客户端访问的时候直接输出。不用脚本解释。在流量非常大的时候(比如每天有上百万的访问量的时候)会起到很好的效果。也就是说服务器端实实在在的存在这个HTML页面。
当然在你网站的流量没有那么大的时候。URL重写是最好的方法(个人观点,大流量的时候可以考虑负载均衡了。同样没有关系)
附URL重写的方法有很多种,APACHE,IISREWRITE。甚至PHP脚本都可以直接处理。比如上例中就是PHP脚本直接处理(该方法好处是大流量的时候直接减轻WEB伺服器的压力。PS:同样也是个人观点:
================================================
下面以程序为例讲一下PHP伪静态的程序实现方法,其实这方法我之前已经有在其它论坛社区发过
程序为例:
http://www.2cto.com /soft.php/1,100,8630.html
CODE:
//利用server变量 取得PATH_INFO信息 该例中为 /1,100,8630.html 也就是执行脚本名后面的部分
if(@$path_info =$_SERVER["PATH_INFO"]){
//正则匹配一下参数
if(preg_match("/\/(\d+),(\d+),(\d+)\.html/si",$path_info,$arr_path)){
$gid =intval($arr_path[1]); //取得值 1
$sid =intval($arr_path[2]); //取得值100
$softid =intval($arr_path[3]); //取得值8630
}else die("Path:Error!");
//相当于soft.php?gid=1&sid=100&softid=8630

//就是这么简单了。~)
方法二:
一 打开 Apache 的配置文件 httpd.conf 。
二 将#LoadMole rewrite_mole moles/mod_rewrite前面的#去掉
三 在 httpd.conf中添加:
<IfMole mod_rewrite.c>
RewriteEngine On
#RewriteCond %{ENV:SCRIPT_URL} (?:index|dispbbs)[-0-9]+.html
RewriteRule ^(.*?(?:index|dispbbs))-([-0-9]+).html 1.php?__is_apache_rewrite=1&__rewrite_arg=2
</IfMole>
四 要实现asp帖子URL到php帖子的映射,在 第三步的<IfMole mod_rewrite.c>和</IfMole>之间添加:
RewriteMap tolowercase int:tolower
RewriteCond %{QUERY_STRING} (?:boardid|page|id|replyid|star|skin)=d+ [NC]
RewriteRule ^(.*(?:index|dispbbs)).asp 1.php?{tolowercase:%{QUERY_STRING}}&__is_apache_rewrite=1
五 保存httpd.conf并重启Apache
方法三:
<?php
/*
功能:PHP伪静态化页面的实现
具体用法:
例如链接为:test.php/year/2006/action/_add.html
mod_rewrite();
$yearn=$_GET["year"];//结果为'2006'
$action=$_GET["action"];//结果为'_add'
*/
function mod_rewrite(){
global $_GET;
$nav=$_SERVER["REQUEST_URI"];
$script_name=$_SERVER["SCRIPT_NAME"];
$nav=substr(ereg_replace("^$script_name","",urldecode($nav)),1);
$nav=preg_replace("/^.ht(m){1}(l){0,1}$/","",$nav);//这句是去掉尾部的.html或.htm
$vars = explode("/",$nav);
for($i=0;$i<Count($vars);$i+=2){
$_GET["$vars[$i]"]=$vars[$i+1];
}
return $_GET;
}
mod_rewrite();
$yearn=$_GET["year"];//结果为'2006'
$action=$_GET["action"];//结果为'_add'
echo $yearn;
echo $action;
?>
<?php
/*
功能:PHP伪静态化页面的实现
具体用法:
例如链接为:test.php/year/2006/action/_add.html
mod_rewrite();
$yearn=$_GET["year"];//结果为'2006'
$action=$_GET["action"];//结果为'_add'
*/
function mod_rewrite(){
global $_GET;
$nav=$_SERVER["REQUEST_URI"];
$script_name=$_SERVER["SCRIPT_NAME"];
$nav=substr(ereg_replace("^$script_name","",urldecode($nav)),1);
$nav=preg_replace("/^.ht(m){1}(l){0,1}$/","",$nav);//这句是去掉尾部的.html或.htm
$vars = explode("/",$nav);
for($i=0;$i<Count($vars);$i+=2){
$_GET["$vars[$i]"]=$vars[$i+1];
}
return $_GET;
}
mod_rewrite();
$yearn=$_GET["year"];//结果为'2006'
$action=$_GET["action"];//结果为'_add'
echo $yearn;
echo $action;
?>

热心网友 时间:2022-04-22 12:21

PHP实现伪静态化页面方法一:
在你的程序初始化时使用如下代码:

<?php
$Php2Html_FileUrl = $_SERVER["REQUEST_URI"];
$Php2Html_UrlString = str_replace("/", "", strrchr($Php2Html_FileUrl, "/"));
$Php2Html_UrlQueryStrList = explode("@", $Php2Html_UrlString);
foreach($Php2Html_UrlQueryStrList as $Php2Html_UrlQueryStr)
{
$Php2Html_TmpArray = explode("|", $Php2Html_UrlQueryStr);
$_GET[$Php2Html_TmpArray[0]] = $Php2Html_TmpArray[1];
}
echo '假静态:$_GET变量<br />';
print_r($_GET);
?>
然后php中调用$_GET变量就像平常一样了。

连接使用方式:

****.php/param1|1234@param2|4321

和****.php?param1=1234¶m2=4321一样。

PHP实现伪静态化页面方法二:通过URL Rewrite实现链接静态化

我们知道搜索引擎对于静态页面是非常友好的,因此很多网站通过生成静态页面等手段方便爬虫抓取自己网站的内容。但是有时候一些应用并不适合全部静态化,比如数据变化非常大的论坛/贴吧系统,这时候我们可以通过URL重写来实现链接的伪静态化,即网站对外使用静态化的链接,而内部实际上仍然使用动态页面的 URL形式。比如像这样一个链接:http://www.ci123.com/abc.php?action=a&id=1,我们可以改写成http://www.ci123.com/abc/a/1.html的形式。这是搜索引擎优化最重要的内容之一,它还有一个额外的好处,可以使页面有一个永久链接,即便以后网站系统内部链接有变化,通过适当改变Rewrite规则就可以保证原先的外部URL一直有效。

下面介绍2种简单的Apache+PHP下实现URL重写的方法,第一种适合有服务器配置权限的用户,第二种适合租用空间的用户,也作为我近期的学习心得的整理。

1、对于有服务器配置权限的用户,推荐使用Apache的mod_rewrite模块,这里假设已经安装好mod_rewrite模块。打开Apache的配置文件,找到相应主机的部分,添加以下代码:

RewriteEngine On
RewriteRule ^/abc/([a-z]+)/([0-9]+).html$ /abc.php?action=$1&id=$2
然后在shell里执行service httpd reload,让Apache重新载入配置就好了。现在在PHP页面里面我们可以把链接写成 abc/a/1.html的形式,Apache在解析这个 URL的时候会rewrite成abc.php?action=a&id=1的形式,并返回正确的页面。运用正则表达式我们可以实现几乎任何我们想要的链接形式,mod_rewrite模块的功能异常强大,这里只是一个及其简单的应用。

2、对于租用空间的用户,一般都没有办法修改Apache的配置,这里有个变通的方法,原理是这样的:当要传递参数访问PHP 页面时,正常情况下是通过自动全局变量$_GET来获得,比如上面的链接,在页面里可以通过$_GET['action'] 和 $_GET['id'] 来获得,重写URL后就不行了。现在在每个页面里require一个url_rewrite.php文件,里面代码如下:

$filename = basename($_SERVER['SCRIPT_NAME']);

if (strtolower($filename) == "abc.php"){
if (!empty($_GET[id])){
$id = intval($_GET[id]);
$action = intval($_GET[action]);
}
else {
$nav = $_SERVER["REQUEST_URI"];
$script = $_SERVER["SCRIPT_NAME"];
$nav = ereg_replace("^$script", "", urldecode($nav));
$vars = explode("/", $nav);
$action = intval($vars[1]);
$id = intval($vars[2]);
}
}
这样$action和$id也得到了,页面里链接可以写成abc.php/a/1的形式来访问相应页面。
需要注意的是这种PHP实现伪静态化页面方法效率较第一种低,第一种方法是在WEB服务器URL解析过程中实现的,而这里是在PHP页面解析过程里实现的,第2种方法只是变通,不得已而为之,要修改链接形式很不方便也不灵活。

热心网友 时间:2022-04-22 13:56

这里是jetee.cn中静态化会员列表部分,根据这部分代码,可以理解静态化的一些概念。

静态化函数部分
/**
* @get list member item 获得静态化模板中要替换变量的内容。
* @param str: To replace the string
* @return string
*/
function get_staticize_replace_str()
{
$replace_str=""; //replace string
$query="select member_id,email_name from member";
$result=Mysql::query($query);
while($row=Mysql::fetch_assoc($result))
{
$replace_str.="<li>".$row["member_id"]."</li>";
$replace_str.="<li>".$row["email_name"]."</li><br>";
}
return $replace_str;
}

/**
* @替换静态化模板中的变量生成静态化页面。
* @
* @return void
*/
function staticize_list_member()
{
$replace_str=$this->get_staticize_replace_str();
$templet=fopen(TENDAO_DIR."/templets/default/list_member.html","r");
$new_file=fopen(TENDAO_DIR."/member/list_member.html","w");
while(!feof($templet))
{
$ripe=fgets($templet);
$ripe=str_replace("{member_items}",$replace_str,$ripe);
fwrite($new_file,$ripe);
}

if (file_exists(TENDAO_DIR."/member/list_member.html")) {
Msg("静态化会员列表成功!返回主页中……",TENDAO_ROOT,0,3000);
exit();
} else {
Msg("静态化会员列表没有成功!返回主页中……",TENDAO_ROOT,0,3000);
}

fclose($templet);
fclose($new_file);
}

/**
* @静态化模板
* @
* @return void
*/

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>会员列表</title>
<style type="text/css">
body{width:980px; margin:0 auto;}
ul{list-style:none; margin:0 auto;}
.member_list .member_header{ width:400px; height:20px;border-left:1px solid #b9df92;border-top:1px solid #b9df92;border-right:1px solid #f73442;background-color:#f73442;
}
.member_list .member_item{width:400px; border-left:1px solid #aaaaaa;border-top:0;border-right:0;border-bottom:1px solid #aaaaaa;background-color:#efefef;}

.member_list li{
display:block;
width:199px;
height:18px;
float:left;
overflow:hidden;
border-right:1px solid #888888;
}
.clear_float{ clear:left;}
</style>
</head>

<body>
<div class="member_list">
<ul class="member_header">
<li>member_id</li>
<li>email_name</li>
</ul>
<ul class="member_item">
<!-- style like
<li>{member_id}</li>
<li>{email_name}</li>

<li>{member_id}</li>
<li>{email_name}</li>
<li>{member_id}</li>
<li>{email_name}</li>
-->{member_items}
</ul>
</div>
</body>
</html>

参考资料:http://jetee.cn/PHPjiayuan/200811/10-8.html

热心网友 时间:2022-04-22 15:47

PHP静态化页面的话,可以用file_put_contents() 函数生成静态的html页面,伪静态的话,这个已经不属于PHP的范围了,这个是对服务器进行配置。

热心网友 时间:2022-04-22 17:55

用smarty在显示之前fetch的结果保存到文件中即可。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
房产证是房管局具体哪个部门在办理 电脑绿灯闪烁无法开机电脑主机绿灯一直亮但是开不开机没有反应_百度... 联想19寸显示器出现绿色一闪一闪 显示器绿灯闪烁,没图像 为什么我的联想显示器的指示灯总是闪烁??? 梦见一个小乞丐撒尿到头来的预兆 国服3.22战斗贼如何打出《高》DPS 国服3.22盗贼天赋,武器选择 魔兽世界3.22版本,战斗贼输出循环,请详细一点儿,谢谢,还有,红色宝石全部... 当老板需要具备哪些品质和能力 脚趾头踢到了水呢地上,破了块皮怎么处理可以用纱布包扎吗 昨天晚上脚趾头痒,然后我就挠破皮,露出肉来了。今天发现肉变暗了,用高锰酸钾消毒片兑水洗脚,流脓了 脚都破了、这个怎么办呀。总是好不了、是因为捂着了?脚趾间都裂开了、有什么好的办法让他可以快速好吗。 去玩水,磨沙地将小脚趾外侧磨破皮了,走路有点疼,怎么缓解?有什么办法可以快点好起来? 踢球时候脚趾破了皮了,怎么样才能让他快好一些?? 国五国五二弹跳博乌尔大赛怎么过 现在猎头公司怎么收费?哪个公司好一点? 弹跳弹跳飞机的折法视频 国内有哪些猎头公司在做RPO LOL中爆破鬼才的Q技能(弹跳*)直接扔到地方身上伤害高还是弹过去伤害高? 我十四岁弹跳56m,173cm,体重65kg 为什么有些人可以跳很高 小斯和haward谁的弹跳厉害 怎么灌篮 staffing和rpo的区别 弹跳弹跳还是弹跳 篮球弹跳 CS跳跃弹跳 怎么跳 高手教一下 19岁,身高183,每天早8点到下午5点上班,希望有经验的给我一个训练弹跳弹速的训练计划,我想扣篮。 弹速与弹跳相比,哪一个对抢篮板球和盖帽更管用,具体分析一下 华硕的那款PG32UQ超胜电竞显示器咋样?有HDMI 2.1接口嘛? HDMI支持不支持2560*1440分辨率:显示器吗 redmibook16锐龙HDMI接口支持DVD、PS4、小米盒子、显示器吗? win10层叠,堆叠显示,并列这三个窗口是灰色的,不能选择,怎么办? excel ctrl+tab切换表格复制粘贴? 如何加快新产品开发进度? 求问web产品,设计、前端、后台之间工作如何衔接和进度安排表 海带胡萝卜耳子和香菇可以一起凉拌吗 怀孕可以吃凉拌胡萝卜海带丝和海带吗 请问广州白云区远景路附近比较近的寺庙,可以求神拜佛的地方有没有? 广州哪里有寺庙可以拜神的? 广州花都那里有观音庙 如果爱奇艺账号是用以前的手机号绑定的但是现在不用了但又充了15现在怎么退回 广州莲花山拜观音有可以求签的吗?灵吗 耳机坏了,要买OPPO原装的,要去哪里买啊? OPPO的专配耳机在哪里买? 如何从记事本读入数据到matlab oppo的耳机在哪里能买到 OPPO原装耳机那里能买到啊! OPPOT15原装耳机怎么卖的?在哪儿可以买的到呢?