巧用apache的rewrite伪静态实现自动生成html静态化[转]


以前用过或是写过的生成html静态化有一个最麻烦的操作,

每次新加一篇文章、新建一个分类或是在header或footer改动了文字,都要全盘重新生成,如果有几万甚至于几十万上百万篇文章,那还不是等它生成html等得郁闷。

所以有了一个新的想法,就是让用户第一次打开这篇文章或是列表、首页时,自动生成这篇文章或列表、首页的html文件。这样,当文章没有更新的情况下,每二个用户打开就是html了,这样就实现了自动化的生成静态。主要使用的是php中我们常写的文件缓存方式进行工作。

但是毕竟是生成静态化,跟url有关系,所以就想到了apache的rewrite伪静态
例如:文章的php完整访问地址:/?m=article&a=view&1=6  rewrite成静态化的真实地址 /article_view_6.html
这样,所有的链接都使用的是/article_view_6.html 第一次执行,用的是rewrite,然后生成了article_view_6.html这个文件,第二次访问。apache就直接使用article_view_6.html这个静态页面了

下面自己写的一个.htaccess文件,主要的作用就是rewrite静态化,如果html文件存在,则直接用,不使用伪静态(不执行php),后台如果对文章、首页或是列表页做了更改,只需把相应的html文件删除就行了,无需重新生成。

<IfModule mod_rewrite.c>   
RewriteEngine on   
#rewrite规则   
RewriteCond %{REQUEST_FILENAME} !-d   
RewriteCond %{REQUEST_FILENAME} !-f   
RewriteRule ^article_view_([0-9]+).html$ ?m=article&a=view&1=$1 [L]   
  
#去掉index.php  框架中需要使用   
RewriteCond %{REQUEST_FILENAME} !-d   
RewriteCond %{REQUEST_FILENAME} !-f   
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]   
  
</IfModule>

生成静态化类

  <?php   
class html   
{   
    public function __construct()   
    {   
        ob_start();   
    }   
  
    public function autoMkdir($file){   
        $f=explode("/",$file);   
        $dir=array();   
        $alldir='';   
        if(count($f)>0){   
            foreach($f as $v){   
                if(!emptyempty($v) && strpos($v,'.')===false) $dir[]=$v;   
            }   
            for($i=0;$i<count($dir);$i++){   
                $alldir.=emptyempty($alldir)?$dir[$i]:'/'.$dir[$i];   
                if(!is_dir($alldir)){   
                    if(!@mkdir($alldir)){   
                        throw new Exception('新建文件夹目录出错,请检查文件夹读写权限. '.$alldir);   
                    }   
                }   
            }   
        }   
    }   
  
    public function writehtml()   
    {   
        $file=$_SERVER['REQUEST_URI'];   
        if(substr($file,-5)!='.html') return '';   
        $file=substr($file,1);   
        if(!file_exists($file)){   
            $this->autoMkdir($file);   
            $content = ob_get_contents();   
            if(!@file_put_contents($file,$content)){   
                throw new Exception('写入html静态文件出错,请检查文件夹读写权限. '.$file);   
            }   
        }   
    }   
}   
?>  
 
   使用方法:

<?php   
require_once("html.class.php");   
$html=new html();   
/*  
这里是执行php文件。  
*/  
  
//成生html文件,应该本句应放最后一行。   
$html->writehtml();   
?>  


原文:http://www.phpd.cn/show-204-1.html
300*300
  • 没有相关文章
  • 没有评论
 文章首页关于迷茫时代关于我写意人生
版权所有:迷茫时代 All rights reserved   
执行时间:0.00598 秒