如何做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" ;
}
?>
 
方法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()。
 
知識點:
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(); //輸出商品詳情頁信息
  
}
  
?>
 
 memcached是鍵值一一對應,key默認最大不能超過128個字節,value默認大小是1M,因此1M大小滿足大多數網頁大小的存儲。
 
 

如果幫到了您,可以支持一下,謝謝您的支持!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM