码迷,mamicode.com
首页 > Web开发 > 详细

如何做URL静态化 和页面的静态化

时间:2017-05-14 19:45:42      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:生成   cts   var   else   商品   com   程序员   tle   后台管理   

为什么要进行URL静态化?

 

1、更好的迎合搜索引擎工作原理的爬行抓取机制;
2、把网站URL静态化更有助于网站获得好的排名;
3、URL静态化有利于用户体验、不容易出错
4、可以提高网站访速度、完全性、稳定性

 

URL重写 


最常见的方法是使用服务器的URL重写模块,在LAMP (Linux十Apache MySQL PHP)服务器上一般使用mod_rewrite模块,Windows服务器也有功能相似的ISAPI Rewrite等模块。  

以LAMP服务器为例,要想把URL : 
 

http://www.XXX.com/products.php?id=123
  

静态化URL为:
  

http://www.XXX.com/products/ 123.html
  

需要启用服务器mod_rewrite模块,然后在.htaccess文件中写入如下代码:
 
RewriteRule /products/([0-9] ) /products.php?id=$1 
 

URL重写代码基于正则表达式,每个网站的动态URL结构不同,服务器设置也可能不同,代码也就不同。正则表达式的写法比较复杂,千变万化,通常需要程序员编写。在写URL静态化代码时必须非常小心,错了一个字符,多了一个斜杠等微小的不同,都可能造成灾难性的后果。
  
注意
 

1,严格来说,这里所说的URL静态化应该称为“伪静态化”,也就是说服务器上还是不存在相应的HTML文件,用户访问时还是动态生成页面,只不过通过URL重写技术使网址看起来像是静态的。也有的CMS系统可以实现真正静态化,站长增添产品或文章后,系统会自动生成真实存在的静态的HTML文件。对搜索引擎来说,真正的静态与伪静态没有区别。  

2,Wordpress程序URL静态化的方法:   

3,如何实现动态url向静态url转换

 页面静态化:

方法1:利用PHP模板生成静态页面

PHP模板实现静态化非常方便,比如安装和使用PHP Smarty实现网站静态化。
在使用Smarty的情况下,也可以实现页面静态化。下面先简单说一下使用Smarty时通常动态读取的做法。 
一般分这几步:
1、通过URL传递一个参数(ID);
2、然后根据此ID查询数据库;
3、取得数据后根据需要修改显示内容;
4、assign需要显示的数据;
5、display模板文件。
Smarty静态化过程只需要在上述过程中添加两个步骤。
第一:在1之前使用 ob_start() 打开缓冲区。
第二:在5之后使用 ob_get_contents() 获取内存未输出内容,然后使用fwrite()将内容写入目标html文件。
 
根据上述描述,此过程是在网站前台实现的,而内容管理(添加、修改、删除)通常是在后台进行,为了能有效利用上述过程,可以使用一点小手段,那就是Header()。具体过程是这样的:在添加、修改程序完成之后,使用Header() 跳到前台读取,这样可以实现页面HTML化,然后在生成html后再跳回后台管理侧,而这两个跳转过程是不可见的。

 

方法2:使用PHP文件读写功能生成静态页面

 

<?
$out1 = "<html><head><title>PHP网站静态化教程</title></head><body>欢迎访问PHP网站开发教程网www.leapsoul.cn,本文主要介绍PHP网站页面静态化的方法</body></html>";
$fp = fopen("leapsoulcn.html","w");
if(!$fp)
{
echo "System Error";
exit();
}
else
{
fwrite($fp,$out1);
fclose($fp);
echo "Success";
}
?>
 
方法3:使用PHP输出控制函数(Output Control)/ob缓存机制生成静态页面

输出控制函数(Output Control)也就是使用和控制缓存来生成静态HTML页面,也会使用到PHP文件读写函数。
比如某个商品的动态详情页地址是: http://xxx.com?goods.php?gid=112
那么这里我们根据这个地址读取一次这个详情页的内容,然后保存为静态页,下次有人访问这个商品详情页动态地址时,我们可以直接把已生成好的对应静态内容文件输出出来。

<?
ob_start();
echo "<html>".
"<head>".
"<title>PHP网站静态化教程</title>".
"</head>".
"<body>欢迎访问脚本之家,本文主要介绍PHP网站页面静态化的方法</body>".
"</html>";
$out1 = ob_get_contents();
ob_end_clean();
$fp = fopen("leapsoulcn.html","w");
if(!$fp)
{
echo "System Error";
exit();
}
else
{
fwrite($fp,$out1);
fclose($fp);
echo "Success";
}
?>
PHP生成静态页面实例代码 2
<?php
$gid = $_GET[‘gid‘]+0;//商品id
$goods_statis_file = "goods_file_".$gid.".html";//对应静态页文件
$expr = 3600*24*10;//静态文件有效期,十天
if(file_exists($goods_statis_file)){
 $file_ctime =filectime($goods_statis_file);//文件创建时间
 if($file_ctime+$expr-->time()){//如果没过期
  echo file_get_contents($goods_statis_file);//输出静态文件内容
  exit;
 }else{//如果已过期
  unlink($goods_statis_file);//删除过期的静态页文件
  ob_start();
  
  //从数据库读取数据,并赋值给相关变量
  
  //include ("xxx.html");//加载对应的商品详情页模板
  
  $content = ob_get_contents();//把详情页内容赋值给$content变量
  file_put_contents($goods_statis_file,$content);//写入内容到对应静态文件中
  ob_end_flush();//输出商品详情页信息
 }
}else{
 ob_start();
  
 //从数据库读取数据,并赋值给相关变量
  
 //include ("xxx.html");//加载对应的商品详情页模板
  
 $content = ob_get_contents();//把详情页内容赋值给$content变量
 file_put_contents($goods_statis_file,$content);//写入内容到对应静态文件中
 ob_end_flush();//输出商品详情页信息
  
}
  
?>

我们知道使用PHP进行网站开发,一般执行结果直接输出到游览器,为了使用PHP生成静态页面,就需要使用输出控制函数控制缓存区,以便获取缓存区的内容,然后再输出到静态HTML页面文件中以实现网站静态化。

PHP生成静态页面的思路为:首先开启缓存,然后输出了HTML内容(你也可以通过include将HTML内容以文件形式包含进来),之后获取缓存中的内容,清空缓存后通过PHP文件读写函数将缓存内容写入到静态HTML页面文件中。
获得输出的缓存内容以生成静态HTML页面的过程需要使用三个函数:ob_start()、ob_get_contents()、ob_end_clean()。
 
知识点:
1、ob_start函数一般主要是用来开启缓存,注意使用ob_start之前不能有任何输出,如空格、字符等。
2、ob_get_contents函数主要用来获取缓存中的内容以字符串形式返回,注意此函数必须在ob_end_clean函数之前调用,否则获取不到缓存内容。
3、ob_end_clean函数主要是清空缓存中的内容并关闭缓存,成功则返回True,失败则返回False

 

 

 

方法4:使用nosql从内存中读取内容(其实这个已经不算静态化了而是缓存);

 

 

 

<?php
$gid = $_GET[‘gid‘]+0;//商品id
$goods_statis_content = "goods_content_".$gid;//对应键
$expr = 3600*24*10;//有效期,十天
$mem = new Memcache;
$mem--->connect(‘memcache_host‘, 11211);
$mem_goods_content = $mem->get($goods_statis_content); 
if($mem_goods_content){
 echo $mem_goods_content;
}else{
 ob_start();
  
 //从数据库读取数据,并赋值给相关变量
  
 //include ("xxx.html");//加载对应的商品详情页模板
  
 $content = ob_get_contents();//把详情页内容赋值给$content变量
 $mem->add($goods_statis_content,$content, false, $expr);
 ob_end_flush();//输出商品详情页信息
  
}
  
?>
 
 memcached是键值一一对应,key默认最大不能超过128个字节,value默认大小是1M,因此1M大小满足大多数网页大小的存储。
 
 

如果帮到了您,可以支持一下,谢谢您的支持!

  1. 技术分享

如何做URL静态化 和页面的静态化

标签:生成   cts   var   else   商品   com   程序员   tle   后台管理   

原文地址:http://www.cnblogs.com/datang6777/p/6853379.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!