转载:https://www.cnblogs.com/caoruiy/p/4698938.html

概念

PHP静态化分为:纯静态化 和 伪静态化;纯静态化又分为:局部静态化 和 完全静态化

纯静态化:是把PHP生成的动态页面保存成静态的html文件,用户访问该静态页面,而不是用户每一次访问都重新生成一张相同的网页,优点就是减小服务器开销,

  局部静态化:是生成的静态文件中,有局部的数据还是通过ajax技术动态获取的;

局部页面静态化就是指在纯html静态化文件中有部分的数据是动态获取的;

它所用的技术就是ajax技术;

它的原理就是在生成纯静态html文件的模版文件中,使用ajax技术来动态的获取并更新需要动态的部分;

这样,在生成的纯静态的html文件中就包括了动态数据的部分,而这个文件就是局部静态化的html文件;

  完全静态化:即不存在动态获取数据的情况,所以内容都来自静态的html页面

伪静态化:其实还是动态访问,其实质是动态生成数据,你访问的网址类似于"http://yourhost,com/index/post/12",是一个静态地址,该地址多见于博客地址,但伪静态化中,你访问的网址实际上经过服务器解析,还是会解析成类似于"http://yourhost,com/?c=index&a=post&id=12"的地址,所以称之为伪静态化

  伪静态的优点:美观;便于搜索引擎收录

纯静态化的实现

利用php内置的ob函数实现页面的静态化,大概步骤如下:

<?php ob_start();//开启缓存
?><p>我是要生成的静态内容,也可以在该处链接数据库生成动态内容于此</p>
<?php 
file_put_contents( 'index.html', ob_get_clean() );//把生成的静态内容保存到index.html文件,而不是输出到浏览器
?>

触发系统生成纯静态化页面

  方法:页面添加缓存时间;手动触发

页面添加缓存时间

<?php
$file_name = 'index.html';
if(file_exists( $file_name ) &&  filemtime( $file_name ) - time() < 10 ){//如果文件是存在并且最后修改时间小于设定时间 10s//filemtime( $file_name );//得到文件最后修改时间//time();//当前时间require_once( $file_name );//引入文件
}else{ob_start( );?>
<p>我是要生成的静态内容</p><?php
file_put_contents( $file_name,  ob_get_contents() )//输出到浏览器
}

  如果后台数据存在更细,定时刷新不能及时更改静态页面,怎么办?所有引入了手动触发的功能

手动触发

  手动触发的大概样式就类似于优酷视频评论区,当有新评论时,会后一条屎黄屎黄的小提示框:“有新评论,点击更新”,也类似于app中的下滑刷新的机制,自己去寻找吧。。

除此之外还有Linux下的crontab定时扫描程序

*/5****php/data/static/index.php

局部静态化内容不做叙述

PHP伪静态

// 静态:http://yourhost.com/index.php/12/2.html
// 动态:http://yourhost.com/index.php?type=12&id=2
$pathinfo = $_SERVER['PATH_INFO'];
if( preg_match('/^\/(\d+)\/(\d+)/', $pathinfo,$path) ){$type = $path[1];$id = $path[2];echo 'type=',$type,'&id=',$id;//获得type 和 id 进一步处理
}else{//错误处理echo "err";
}

Apache服务器rewrite配置

在httpd.conf文件中,找到

#注释:去掉前边的" # "开启rewrite服务,重启服务器生效
#LoadModule rewrite_module modules/mod_rewrite.so#注释:http-vhosts.conf文件是虚拟域名配置的文件,开启改文件可以配置虚拟域名,一般默认是开启的
#Include conf/extra/httpd-vhosts.conf 

如果你不会配置虚拟域名,可以参考我的另外一篇文章:WAMPServer配置修改及问题汇总

rewrite伪静态配置

<VirtualHost *:80>ServerAdmin webmaster@dummy-host.example.comDocumentRoot "c:/Apache24/docs/dummy-host.example.com"ServerName dummy-host.example.comServerAlias www.dummy-host.example.comErrorLog "logs/dummy-host.example.com-error.log"CustomLog "logs/dummy-host.example.com-access.log" common#配置规则如下所示RewriteEngine onRewriteRule ^/vidio/([0-9]*).html$ /vidio.php?id=$1</VirtualHost>

RewriteEngine其他配置规则以后会再添加

现在你访问http://yourhost.com/vidio/12.html时,相当于访问了http://yourhost.com/vidio.php?id=12

 问题:配置完上面的内容后,又存在以下问题?如果项目目录下存在该静态页面时,到底是访问我们的静态页面还是访问我们伪静态的文件呢?

    经过测试我们发现,并不会访问静态页面,如果我们想访问我们的静态页面怎么办?

伪静态和静态页面冲突时解决办法:

    #完整的配置规则如下RewriteEngine on#添加以下两项,!-d  和  !-f  分别表示  目录 和 文件#当访问的伪静态和相应的静态目录和文件冲突时,访问静态页面RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-dRewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-fRewriteRule ^/index/([0-9]*).html$ /index.php?id=$1

PHP 页面静态化/纯静态化/伪静态化相关推荐

  1. 服务器怎么部署静态网站,纯静态网站部署服务器

    纯静态网站部署服务器 内容精选 换一换 PHPWind(简称:PW)是一个基于PHP和MySQL的开源社区程序,是国内较受欢迎的论坛之一.轻架构,高效易开发,使用户可快速搭建并轻松管理.本文档指导用户 ...

  2. PHP实现页面静态化、纯静态化及伪静态化

    概念 php静态化分为:纯静态化 和 伪静态化: 纯静态化又分为:局部静态化 和 完全静态化 纯静态化:是把PHP生成的动态页面保存成静态的html文件,用户访问该静态页面,而不是用户每一次访问都重新 ...

  3. 网页静态化和网页伪静态化之间的区别与选择

    网页静态化和网页伪静态化,如果我们是一个不懂网站的人估计听到这些词可能会比较头晕,王晟璟在刚开始接触并尝试建设自己的个人博客网站的时候也是如此,看了很多关于这方面的资料也还是云里雾里的,不过后面终于整 ...

  4. jsp静态化和伪静态化转载

    2019独角兽企业重金招聘Python工程师标准>>> 首先说说为什么要静态化. 对于现在的Web Application来说,动态页面是占有绝对高的地位的,正因为有了动态化,才有了 ...

  5. php技术创新:利用动态404页面实现全站自动静态化

    还就没到这里来了,不知道大家对我还有印象没有?上次来记得是给一个眼角膜脱落的兄弟捐款,那时候我对php还一窍不通呢.经过一年多的刻苦学习,现在我又回来了这次不仅初步掌握了PHP语言,还带来了一篇刚刚发 ...

  6. html静态网页模板_aspnetcore 实现简单的伪静态化

    aspnetcore 实现简单的伪静态化 Intro 在我的活动室预约项目中,有一个公告模块,类似于新闻发布,个人感觉像新闻这种网页基本就是发布的时候编辑一次之后就再也不会改了,最适合静态化了, 静态 ...

  7. wordpress真正静态化插件really-static(纯静态html网页生成插件)

    初期被推荐了两款插件:cos-html-catch,,super static cache,really static,本人一直使用的是super static cache还是不错的.但通过个人试用筛 ...

  8. 静态化 - 真静态技术

    静态化,真静态技术. 采用php的ob缓存技术实现,结合手写模版引擎代码. 一个小实例,新闻管理系统. 项目说明: 为了便于SEO,要将新闻的页面做成静态化的页面.网址是静态的html,内容也是静态的 ...

  9. 伪静态与纯静态的区别是什么?

    一.伪静态的好处 有些用户觉得,伪静态和真静态实际被收录量会相差很大,其实不然,从你个人角度,你去判断一下一个帖子到底是真静态还是伪静态?估计很难看得出,因为所谓静态的意思,就是地址中不带问号,不带问 ...

最新文章

  1. 项目总结10:通过反射解决springboot环境下从redis取缓存进行转换时出现ClassCastException异常问题...
  2. makefile:2: *** missing separator. Stop. make 之后出现的错误,解决方法
  3. 深圳大学计算机暑期学校,The First Day-深度学习暑期学校
  4. 苹果前置摄像头拍出来是反的怎么调_不用等了!屏下摄像头难攻克,明年还是挖孔屏...
  5. Android开发之Buidler模式初探结合AlertDialog.Builder讲解
  6. 日常办公会用到的python模块-Python如何去实际提高工作的效率?也许这个会有用!...
  7. heima Oracle day2
  8. linux使用lftp文件自动认证上传下载
  9. C++模板的注意事项
  10. 对比了6家交易所的下币规则,我们发现……
  11. 从零基础入门Tensorflow2.0 ----三、9.tf.function
  12. 超级计算机卫星云图,台风路径实时发布系统20号台风云图 台风艾莎尼高清卫星云图实时追踪...
  13. antv | G2Plot 数据可视化图表库-案例
  14. 九月手机无新事:头部品牌没创新,二三线品牌静悄悄
  15. 以太网与工业以太网的区别
  16. 激活Office 365移动设备管理MDM服务
  17. python爬虫100例--酷我音乐--周杰伦歌曲(1)
  18. sd和sem啥区别_标准差SD和标准误sem的区别
  19. IDEA 官网进不去解决办法
  20. 排队叫号医院管理系统源码

热门文章

  1. python编写ftp客户端_用Python写FTP客户端程序
  2. 八十、归并排序及其分而治之思想
  3. 基于动态提前退出的预训练模型推理加速简介
  4. CVPR 2021 | 天津大学提出PISE:形状与纹理解耦的人体图像生成与编辑方法
  5. ACL 2019 开源论文 | 基于知识库和大规模网络文本的问答系统
  6. 十进制整数(包括负数)和二进制的转换
  7. A query was run and no Result Maps were found for the Mapped Statement....
  8. RabbitMQ之呕心沥血的总结(图文并茂、万字级别、毕生所学)
  9. 十大经典排序算法总结(够兄弟们喝一壶的)
  10. 启动maven项目在eclipse中报错 Can‘t find class [×××] for bean with name '××' defined in class path resource