為什么要進行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();
//輸出商品詳情頁信息
}
?>
如果幫到了您,可以支持一下,謝謝您的支持!