Blogger Information
Blog 39
fans 0
comment 2
visits 47044
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP 页面静态化/纯静态化/伪静态化
Tlilam的PHP之路
Original
1048 people have browsed it

概念

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

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!