如何作URL靜態化 和頁面的靜態化

爲何要進行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" ;
}
?>
 
方法3:使用PHP輸出控制函數(Output Control)/ob緩存機制生成靜態頁面

輸出控制函數(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生成靜態頁面實例代碼 2
<?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(); //輸出商品詳情頁信息
  
}
  
?>
 
 memcached是鍵值一一對應,key默認最大不能超過128個字節,value默認大小是1M,所以1M大小知足大多數網頁大小的存儲。
 
 

若是幫到了您,能夠支持一下,謝謝您的支持!

相關文章
相關標籤/搜索