博客列表 >PHP 页面静态化/纯静态化/伪静态化

PHP 页面静态化/纯静态化/伪静态化

Tlilam的PHP之路
Tlilam的PHP之路原创
2020年07月24日 20:57:481047浏览

概念

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

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

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

  • 完全静态化:即不存在动态获取数据的情况,所以内容都来自静态的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伪静态

// 静态: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.com
   DocumentRoot "c:/Apache24/docs/dummy-host.example.com"
   ServerName dummy-host.example.com
   ServerAlias www.dummy-host.example.com
   ErrorLog "logs/dummy-host.example.com-error.log"
   CustomLog "logs/dummy-host.example.com-access.log" common


   #配置规则如下所示
   RewriteEngine on
   RewriteRule ^/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} !-d
   RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
   RewriteRule ^/index/([0-9]*).html$ /index.php?id=$1


如果有错误或别的问题欢迎联系我,感谢

邮箱:tlilam@163.com

QQ:739682648

微信号:Tlilam

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议