PHP如何实现页面纯静态化
基本方式
1. file_put_contents()函数: 将一个字符串写入文件
2. 使用PHP内置缓存机制实现页面静态化 -- output_buffering
aaa
如何触发系统生成纯静态化页面
1. 页面添加缓存时间
用户请求页面 > 页面时间(缓存时间)是否过期 > 是 > 动态页面并生成一份新的静态页面 或者 > 否 > 获取静态页面
2. 手动触发方式
重新请求数据库数据,刷新页面
3. crontab定时扫描程序
linux系统服务器中的一个工具,设置定时执行相关的内容
crontab -e
* /5 * * * * php /data/static/index.php //每5分钟执行一次
静态化页面中如果想加载动态的内容如何处理。即,局部纯静态
使用ajax请求
伪静态
把动态的url地址转换为静态的url地址,通过这种方式访问的页面还是动态页面
1. 让url美观
2. 让搜索引擎收录页面内容
PHP处理伪静态
通过正则表达式分析URL地址,进行解析
$_SERVER['path_info']
注:nginx服务器默认情况下不支持path_info模式,需要配置
preg_match(string$pattern,string$subject [,array&$matches[,int$flags = 0[,int$offset = 0]]] ): 搜索subject与pattern给定的正则表达式的一个匹配
filemtime(string$filename): 本函数返回文件中的数据块上次被写入的时间,也就是说,文件的内容上次被修改的时间
WEB服务器rewrite配置
apache下rewrite配置
1. 虚拟域名配置
1). httpd.conf文件中开启相关模式
LoadModule rewrite_module modules/mod_rewrite.so
Include conf/extra/httpd-vhosts.conf (加载httpd.conf文件时会导入httpd-vhosts.conf文件,文件中有虚拟域名的配置)
2). httpd-vhosts.conf文件增加相关域名
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "${SRVROOT}/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
</VirtualHost>
3). 在hosts文件中配置域名
2. httpd_vhosts.conf配置文件配置相关信息
在配置好的虚拟域名中加入,开启rewrite引擎,建立规则
RewriteEngine on
RewriteRule ^/detail/([0-9]*).html$ /detail.php?id=$1
如果以上信息配置完毕,当项目中存在和伪静态相同url的纯静态html文件时,该url会访问伪静态指向的动态文件,为防止这种情况发生,可以在虚拟域名配置中加入以下:
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
即如果服务器存在该目录或文件,则直接访问已存在的目录或文件,不存在时,访问伪静态
完整配置如下
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "${SRVROOT}/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
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteRule ^/detail/([0-9]*).html$ /detail.php?id=$1
</VirtualHost>
nginx下rewrite配置
待学...
网友评论