页面静态化详解

一、明确几个重要概念

静态网址:纯静态HTML文档

动态网址:内容存于数据库中,根据要求显示内容,URL中以 ?, & 显示不同的参数,如:news.php?lang=cn&class=1&id=2

伪静态网址:伪静态仅仅是对动态网址的一个重写,伪静态网址不能让动态网址“静态化” ,搜索引擎不会认为伪静态就是HTML文档。其次,伪静态可取,但应把重心放在去除冗余参数、规范URL、尽可能的避免重复页上。

举例说明: 这是一个动态网址 news.php?lang=cn&class=1&id=2,从seo的角度来看, 最好重写为 news-cn-sport-id2.html。这样的也更加有效的防止sql注入攻击 ☞ 但是也不要精简重写为 news-2.html,这样简写同样不利于搜索引擎优化.

二、页面静态化概念

■ 页面静态化概念

我们大多数情况下是直接访问php文件,php脚本在服务器端执行并 返回信息,对于一些大型的网站,访问量很大,频繁的动态操作和操作 数据库会加重服务器的负担.

在实际开发中,通常使用缓存技术(memcached)或者页面静态化 来解决

从静态化形式看,页面静态化分为:

① 真静态

② 伪静态

从静态范围看,页面静态化分为:

① 整个页面静态化

② 局部静态化(jquery)

页面静态化的必要性1

我们看一个实际问题? 使用apache提供的 benchmarking tool来测试 下面的两个程序,看看访问各种访问的时间是怎样的?

//直接使用html输出for循环的 信息. 01......99
for($i=0;$i<100;$i++){
echo "$i";
}

apache/bin/ab.exe 程序可以来做效率测试

基本使用: ab [options] [http[s]://]hostname[:port]/path

options是选项: -n 执行访问次数 -c 用户并发数量

页面静态化的必要性2

从seo的角度来,google,baidu 更偏好静态网址(伪静态网址),比 如: news.php?lang=cn&class=1&id=2 这样的动态网址,不如 news-cn-sport-id2.html ,这样的格式.

页面静态化的必要性3

从安全的角度来看news-cn-sport-id2.html 更不容易被sql注入攻 击。

三、使用php缓存机制完成页面静态化

我们可以使用php自带的缓存机制来完成页面静态化,但在这里我要 说明一点,仅靠php自身的缓存机制并不能完美的解决页面静态化, 往往需要和其它静态化技术(通常是伪静态技术)结合使用,

例子:(新闻查询系统)当访问一个页面时,先判断是否存在缓存,如果存在,则直接输出缓存文件中的内容。否则,则先查询数据库,获得数据,然后生成缓存文件。 详解PHP的缓存机制(图), Output_buffering ,常用的函数包括 ob_start() ob_get_contents() ,ob_clean(),ob_end_clean() ob_end_flush() ob_flush() flush()

关于PHP经常有面试题.简述ob_flush() 和flush()的 区别? 简述PHP缓存机制.

单纯使用php缓存机制完成页面静态的不足分析

解决方案(真静态和伪静态技术.)

四、页面静态化(真静态)--原理示意图

简单的说: 页面静态化技术就是要把php->html直接访问,从 而减少对数据库的操作,达到提高访问速度

基本流程是:

1.创建模板文件template.html

2.通过模板文件,创建静态页面的 php文件 xx.php

3. 用户访问生成的静态页面 xx.html

快速入门案例(根据模板生成静态页面)

五、数据库和页面静态化(真静态)结合  

使用静态页面技术如何处理,在添加新闻的时候完成两件事情:

①添加数据到数据库

②同时生成对应的新闻详细信息显示静态页面

六、页面静态化(真静态)的优点和缺点

html静态页(真静态)的好处有三点;

一是减少服务器对数据响应的负荷,

二是加载不用调动数据库,响应速度快。

三是便于优化引擎。 缺点也有几点:一是空间占用比较大。二是生成的文件多了,服务器对html文件的响应负担也较重。

如果一个系统使用真静态进行页面静态化,需要生成海量的静态 页面,我们可以考虑使用伪静态来处理.

七、伪静态 1  

比如这个网页 http://localhost/content.php/1,122,8912.html 其实处理的脚本是content.php 参数为1,122,8912 相当于content.php?a=1&amp;b=122&amp;c=8912 只不过这样的URL太难记。搜索引擎也不喜欢。

真静态只是完全生成了HTML。 客户端访问的时候直接输出。不用脚本解释。在流量非常大的时候(比如每天有上百万的访问量的时候)会起到很好的效果。也就是说服务器端实实在在的存在这个HTML页面。 当然在你网站的流量没有那么大的时候。URL重写是最好的方法(如果访问量很大,还可以考虑负载均衡)

URL重写的方法有很多种,APACHE(rewrite),IISREWRITE。PHP脚本直接处理。我们先讲解如何使用PHP脚本直接处理。

八、伪静态 2  

下面以程序为例讲一下PHP伪静态的程序实现方法 程序为例:

http://localhost/content.php/1,122,8912.html

//利用server变量 取得PATH_INFO信息 该例中为 /1,122,8912.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]);
//取得值122
$softid =intval($arr_path[3]);
//取得值8912
}else die("Path:Error!");
}else die('Path:Nothing!');

面试题: 匹配模式中的 s表示什么意思.

九、伪静态 3

下面以程序为例讲一下另外一种形式的PHP伪静态的程序实现方法程序为例:

http://www.hsp.com/news-id23.html 实现上面形式的伪静态使用另外一种方式,通过apache的 rewrite机制来实现.

十、伪静态4

下面以程序为例讲一下另外一种形式的PHP伪静态的程序实现方法 程序为例:

http://www.hsp.com/news-id23.html 我们使用另外一种方式,通过apache的 rewrite机制来实现.

1.检测Apache是否支持mod_rewrite 通过php提供的phpinfo()函数查看环境配置,通过Ctrl+F查找到“Loaded Modules”,其中列出了所有 apache2handler已经开启的模块,如果里面包括“mod_rewrite”,则已经支持,不再需要继续设置。

如果没有开启“mod_rewrite”,则打开目录 您的apache安装目录“/apache/conf/” 下的 httpd.conf 文 件,通过Ctrl+F查找到“LoadModule rewrite_module”,将前面的”#”号删除即可。

如果没有查找到,则到“LoadModule” 区域,在最后一行加入“LoadModule rewrite_module modules/mod_rewrite.so”(必选独占一行),然后重启apache服务器即可。

十一、伪静态5

2.在httpd.conf中配置虚拟主机

# Virtual hosts

启用虚拟主机 Include conf/extra/httpd-vhosts.conf

3.httpd_vhosts.conf文件中,配置相应的选项.详细讲解

<VirtualHost *:80>
    DocumentRoot "C:/myenv2/apache/htdocs/static2"
    ServerName www.hsp.com
    <Directory "C:/myenv2/apache/htdocs/static2">
    #403错误提示,可以阻止人访问.
    #Allow from All
    #如果文件目录在apache目录外面,注释掉optinos 则,不能列表.
    #options +Indexes
    #不让列出列表配置
    #options None
    #设置欢迎页面
    #DirectoryIndex  aa.html
    #下面这个表示可以去读取 .htaccess文件,也可以直接在虚拟主机中配置.
    #Allowoverride All
    RewriteEngine On
    RewriteRule news-id(d+).html$ searchNews.php?id=$1
    #如果匹配不到,可以指定一个错误页
    errorDocument 404 /404.php
    #这里可以设置多个重写的规则
    #RewriteRule news-id.html$ error.php
    </Directory>
</VirtualHost>

十二、伪静态 6 

4.在相应的目录下编写.htaccess 重写规则

如果在linux下可以直接创建, 如果是在windows平台下,用记事本创建一个文件,比如abc.txt,然后另存 为 .htaccess文件即可

5.重写规则,也可以直接在配置虚拟主机的<Directory>段配置.

十三、伪静态 7

☞ rewrite规则介绍

我们新建一个.htaccess文件之后,就在里面写入以下内容: RewriteEngine on #rewriteengine为重写引擎开关on为开启off为关闭

快速入门案例: RewriteRule ([0-9]{1,})$ index.php?id=$1 我讲解一下RewriteRule:RewriteRule是重写规则,支持正则表达式的,上面的 ([0-9]{1,})是指由数字组成的,$是结束标志,说明是以数字结束!

现在我们可以实现伪静态页面了,(上机练习题!)

我们希望把用户输入的 http://localhost/view-23.html ulr

重新被apache替换成 http://localhost/index.php?action=view&id=23 这个规则应当怎样写?

☞ 在.htaccess目录下创建一个index.php看看能否得到apache改写后的url $_GET['action'] => view $_GET['id'] => 23

十四、伪静态特点

如果一个网站使用真静态技术,会生成海 量的html静态页面,可以考虑使用伪静态 技术来优化我们的网站

url重写(伪静态)的好处:

一,可以方便的实现对化化引擎的优化,并且比生成静态更加方便。

二、占空间比较小。

三、首页每天都自动变化,不用维护。网站首页一般都有热点排行之类的,你可以设为,24小时排行,一周排行,再加上最新文章,最新点评等。这样首页天天是有变化的。

四,便于广告的轮显。比如:你可以把art1234.php,这个虚成n个页,如art_1234.html,news_1234.html,top_1234.html,在不同的页面放不同的广告.总之是动态的,你就可以随意动。

url重写的缺点:就是效率不如生成html的,因为它不是真正意义上的静态页,每次请求是要读取数据库的。但你可以用缓存技术来补偿一下。 

十五、真静态 VS 伪静态

①真静态访问效率高,利于seo.可以减少对数据库的操作。但是会占用大量 的磁盘.

②伪静态

一、可以方便的实现对搜索引擎的优化,

二、占空间比较小。

三、通过生成不同view-id2.hmtl 可以实现内容的变化.

四、有效的防止了注入攻击

小结: 如果一个网页会被频繁的访问(比如百万级别),通过该网页每次都会去操作数据库,可以考虑使用真静态(建议有针对性的使用),如果一个网页为了实现对搜索引擎的优化,提供网站的安全性,使用伪静态.

十六、真静态和伪静态的选择

使用静态化技术的建议.

1.网站实时性要求高,不要使用静态化(真静态,伪静态均不适宜).

2.如果网站访问量较小,没有必要使用静态化技术

3.如果数据项目不多,但是访问频率极大,建议使用真静态,比如新浪新闻频道

4.如果数据项目海量,使用真静态会生成海量的html静态页面,建议 使用伪静态

5.在一个大型网站中,静态化技术是综合使用的,这个需要大家经验 的积累,多做项目

原文地址:https://www.cnblogs.com/suihui/p/3238190.html