爲何要進行URL靜態化?php
若是幫到了您,您能夠小支持一下,謝謝您html
一、更好的迎合搜索引擎工做原理的爬行抓取機制;
二、把網站URL靜態化更有助於網站得到好的排名;
三、URL靜態化有利於用戶體驗、不容易出錯
四、能夠提升網站訪速度、徹底性、穩定性程序員
URL重寫 正則表達式
最多見的方法是使用服務器的URL重寫模塊,在LAMP (Linux十Apache MySQL PHP)服務器上通常使用mod_rewrite模塊,Windows服務器也有功能類似的ISAPI Rewrite等模塊。 sql
以LAMP服務器爲例,要想把URL :
數據庫
http://www.XXX.com/products.php?id=123
緩存
靜態化URL爲:
服務器
http://www.XXX.com/products/ 123.html
nosql
須要啓用服務器mod_rewrite模塊,而後在.htaccess文件中寫入以下代碼:
RewriteRule /products/([0-9] ) /products.php?id=$1
memcached
URL重寫代碼基於正則表達式,每一個網站的動態URL結構不一樣,服務器設置也可能不一樣,代碼也就不一樣。正則表達式的寫法比較複雜,變幻無窮,一般須要程序員編寫。在寫URL靜態化代碼時必須很是當心,錯了一個字符,多了一個斜槓等微小的不一樣,均可能形成災難性的後果。
注意:
1,嚴格來講,這裏所說的URL靜態化應該稱爲「僞靜態化」,也就是說服務器上仍是不存在相應的HTML文件,用戶訪問時仍是動態生成頁面,只不過經過URL重寫技術使網址看起來像是靜態的。也有的CMS系統能夠實現真正靜態化,站長增添產品或文章後,系統會自動生成真實存在的靜態的HTML文件。對搜索引擎來講,真正的靜態與僞靜態沒有區別。
2,Wordpress程序URL靜態化的方法:
3,如何實現動態url向靜態url轉換
頁面靜態化:
方法1:利用PHP模板生成靜態頁面
PHP模板實現靜態化很是方便,好比安裝和使用PHP Smarty實現網站靜態化。
在使用Smarty的狀況下,也能夠實現頁面靜態化。下面先簡單說一下使用Smarty時一般動態讀取的作法。
通常分這幾步:
一、經過URL傳遞一個參數(ID);
二、而後根據此ID查詢數據庫;
三、取得數據後根據須要修改顯示內容;
四、assign須要顯示的數據;
五、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()。
知識點:
一、ob_start函數通常主要是用來開啓緩存,注意使用ob_start以前不能有任何輸出,如空格、字符等。
二、ob_get_contents函數主要用來獲取緩存中的內容以字符串形式返回,注意此函數必須在ob_end_clean函數以前調用,不然獲取不到緩存內容。
三、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();
//輸出商品詳情頁信息
}
?>
若是幫到了您,能夠支持一下,謝謝您的支持!