zoukankan      html  css  js  c++  java
  • 如何做URL静态化 和页面的静态化

    为什么要进行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大小满足大多数网页大小的存储。
     
     

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

  • 相关阅读:
    博客园第一篇随笔css3动画(奔跑的小杨)
    Python输出菱形
    Android开发经验总结
    Android中Activity共享变量的另一方法:Application context
    system()与execv()函数使用详解
    Sublime Text2 编译和运行C/C++程序(windows)
    Android View.post(Runnable )
    Android图像处理之Bitmap类
    android中dip、dp、px、sp和屏幕密度
    System.setProperty and System.getProperty
  • 原文地址:https://www.cnblogs.com/datang6777/p/6853379.html
Copyright © 2011-2022 走看看