如何做URL静态化 和页面的静态化
Posted datang6777
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何做URL静态化 和页面的静态化相关的知识,希望对你有一定的参考价值。
为什么要进行URL静态化?
如果帮到了您,您可以小支持一下,谢谢您
1、更好的迎合搜索引擎工作原理的爬行抓取机制;
2、把网站URL静态化更有助于网站获得好的排名;
3、URL静态化有利于用户体验、不容易出错
4、可以提高网站访速度、完全性、稳定性
URL重写
最常见的方法是使用服务器的URL重写模块,在LAMP (Linux十Apache mysql php)服务器上一般使用mod_rewrite模块,Windows服务器也有功能相似的ISAPI Rewrite等模块。
以LAMP服务器为例,要想把URL :
http://www.XXX.com/products.php?id=123
静态化URL为:
http://www.XXX.com/products/ 123.html
需要启用服务器mod_rewrite模块,然后在.htaccess文件中写入如下代码:
RewriteRule /products/([0-9] ) /products.php?id=$1
URL重写代码基于正则表达式,每个网站的动态URL结构不同,服务器设置也可能不同,代码也就不同。正则表达式的写法比较复杂,千变万化,通常需要程序员编写。在写URL静态化代码时必须非常小心,错了一个字符,多了一个斜杠等微小的不同,都可能造成灾难性的后果。
注意:
1,严格来说,这里所说的URL静态化应该称为“伪静态化”,也就是说服务器上还是不存在相应的HTML文件,用户访问时还是动态生成页面,只不过通过URL重写技术使网址看起来像是静态的。也有的CMS系统可以实现真正静态化,站长增添产品或文章后,系统会自动生成真实存在的静态的HTML文件。对搜索引擎来说,真正的静态与伪静态没有区别。
2,Wordpress程序URL静态化的方法:
3,如何实现动态url向静态url转换
页面静态化:
方法1:利用PHP模板生成静态页面
PHP模板实现静态化非常方便,比如安装和使用PHP Smarty实现网站静态化。
在使用Smarty的情况下,也可以实现页面静态化。下面先简单说一下使用Smarty时通常动态读取的做法。
一般分这几步:
1、通过URL传递一个参数(ID);
2、然后根据此ID查询数据库;
3、取得数据后根据需要修改显示内容;
4、assign需要显示的数据;
5、display模板文件。
Smarty静态化过程只需要在上述过程中添加两个步骤。
第一:在1之前使用 ob_start() 打开缓冲区。
第二:在5之后使用 ob_get_contents() 获取内存未输出内容,然后使用fwrite()将内容写入目标html文件。
根据上述描述,此过程是在网站前台实现的,而内容管理(添加、修改、删除)通常是在后台进行,为了能有效利用上述过程,可以使用一点小手段,那就是Header()。具体过程是这样的:在添加、修改程序完成之后,使用Header() 跳到前台读取,这样可以实现页面HTML化,然后在生成html后再跳回后台管理侧,而这两个跳转过程是不可见的。
方法2:使用PHP文件读写功能生成静态页面
<?
$out1
=
"<html><head><title>PHP网站静态化教程</title></head><body>欢迎访问PHP网站开发教程网www.leapsoul.cn,本文主要介绍PHP网站页面静态化的方法</body></html>"
;
$fp
=
fopen
(
"leapsoulcn.html"
,
"w"
);
if
(!
$fp
)
{
echo
"System Error"
;
exit
();
}
else
{
fwrite(
$fp
,
$out1
);
fclose(
$fp
);
echo
"Success"
;
}
?>
输出控制函数(Output Control)也就是使用和控制缓存来生成静态HTML页面,也会使用到PHP文件读写函数。
比如某个商品的动态详情页地址是: http://xxx.com?goods.php?gid=112
那么这里我们根据这个地址读取一次这个详情页的内容,然后保存为静态页,下次有人访问这个商品详情页动态地址时,我们可以直接把已生成好的对应静态内容文件输出出来。
<?
ob_start();
echo
"<html>"
.
"<head>"
.
"<title>PHP网站静态化教程</title>"
.
"</head>"
.
"<body>欢迎访问脚本之家,本文主要介绍PHP网站页面静态化的方法</body>"
.
"</html>"
;
$out1
= ob_get_contents();
ob_end_clean();
$fp
=
fopen
(
"leapsoulcn.html"
,
"w"
);
if
(!
$fp
)
{
echo
"System Error"
;
exit
();
}
else
{
fwrite(
$fp
,
$out1
);
fclose(
$fp
);
echo
"Success"
;
}
?>
<?php
$gid
=
$_GET
[
\'gid\'
]+0;
//商品id
$goods_statis_file
=
"goods_file_"
.
$gid
.
".html"
;
//对应静态页文件
$expr
= 3600*24*10;
//静态文件有效期,十天
if
(
file_exists
(
$goods_statis_file
)){
$file_ctime
=
filectime
(
$goods_statis_file
);
//文件创建时间
if
(
$file_ctime
+
$expr
-->time()){
//如果没过期
echo
file_get_contents
(
$goods_statis_file
);
//输出静态文件内容
exit
;
}
else
{
//如果已过期
unlink(
$goods_statis_file
);
//删除过期的静态页文件
ob_start();
//从数据库读取数据,并赋值给相关变量
//include ("xxx.html");//加载对应的商品详情页模板
$content
= ob_get_contents();
//把详情页内容赋值给$content变量
file_put_contents
(
$goods_statis_file
,
$content
);
//写入内容到对应静态文件中
ob_end_flush();
//输出商品详情页信息
}
}
else
{
ob_start();
//从数据库读取数据,并赋值给相关变量
//include ("xxx.html");//加载对应的商品详情页模板
$content
= ob_get_contents();
//把详情页内容赋值给$content变量
file_put_contents
(
$goods_statis_file
,
$content
);
//写入内容到对应静态文件中
ob_end_flush();
//输出商品详情页信息
}
?>
我们知道使用PHP进行网站开发,一般执行结果直接输出到游览器,为了使用PHP生成静态页面,就需要使用输出控制函数控制缓存区,以便获取缓存区的内容,然后再输出到静态HTML页面文件中以实现网站静态化。
PHP生成静态页面的思路为:首先开启缓存,然后输出了HTML内容(你也可以通过include将HTML内容以文件形式包含进来),之后获取缓存中的内容,清空缓存后通过PHP文件读写函数将缓存内容写入到静态HTML页面文件中。
获得输出的缓存内容以生成静态HTML页面的过程需要使用三个函数:ob_start()、ob_get_contents()、ob_end_clean()。
知识点:
1、ob_start函数一般主要是用来开启缓存,注意使用ob_start之前不能有任何输出,如空格、字符等。
2、ob_get_contents函数主要用来获取缓存中的内容以字符串形式返回,注意此函数必须在ob_end_clean函数之前调用,否则获取不到缓存内容。
3、ob_end_clean函数主要是清空缓存中的内容并关闭缓存,成功则返回True,失败则返回False
方法4:使用nosql从内存中读取内容(其实这个已经不算静态化了而是缓存);
<?php
$gid
=
$_GET
[
\'gid\'
]+0;
//商品id
$goods_statis_content
=
"goods_content_"
.
$gid
;
//对应键
$expr
= 3600*24*10;
//有效期,十天
$mem
=
new
Memcache;
$mem
--->connect(
\'memcache_host\'
, 11211);
$mem_goods_content
=
$mem
->get(
$goods_statis_content
);
if
(
$mem_goods_content
){
echo
$mem_goods_content
;
}
else
{
ob_start();
//从数据库读取数据,并赋值给相关变量
//include ("xxx.html");//加载对应的商品详情页模板
$content
= ob_get_contents();
//把详情页内容赋值给$content变量
$mem
->add(
$goods_statis_content
,
$content
, false,
$expr
);
ob_end_flush();
//输出商品详情页信息
}
?>
如果帮到了您,可以支持一下,谢谢您的支持!
以上是关于如何做URL静态化 和页面的静态化的主要内容,如果未能解决你的问题,请参考以下文章