PHP頁面純靜態化與僞靜態化

       在不少地方都看到有PHP整站靜態化的東東,怪唬人的。。其實,你會靜態化一個頁面,那麼別說整站了,想靜態化多少均可以。因此關鍵是,首先要知道怎麼靜態化一個頁面,瞭解靜態化的原理是關鍵,這裏就說下我我的的理解了。php


區別:html

 純靜態頁面:是指網頁文件在服務器的硬盤上以純html代碼文件存放的,默認文件名一般是htm、html、shtml、shtm等,通常狀況下是由一個內容管理系統來生成的網站。web

僞靜態網站:是指以html或者htm爲擴展名的url,在客戶端看起來被認爲是靜態網站,實際上在服務器端採用URL重寫技術指向動態程序路徑。另外還有的是採用Ajax等JS技術調用服務器端動態內容來顯示,雖然網頁是靜態的,內容倒是動態讀取的。數據庫

優缺點:apache

僞靜態實際上是動態的或者半動態的網站,動態和靜態各有優缺,通常來講靜態的性能優點明顯,訪問量大的網站無不是採用靜態化的網站。隨着網站的複雜程度增高和用戶對交互的需求,一些動態的部分不能夠靜態化,因此,目前大多數網站或多或少都會有動態的部分。瀏覽器


1、純靜態頁面:

首先,須要知道幾個函數。緩存

ob_start();安全

ob_end_clean();服務器

ob_get_contents();ide

file_put_contents();//這個能夠用fopen,fwrite代替

file_exists();等函數。

不知道這些函數的就本身去翻手冊,這裏就很少講解了。

OK。下面就是生成的過程。。

假設你須要把當前的頁面,生成成a.html。那麼

------------------------------------------------------

//如今這裏留個位置,,,,,,,,,,,,,,,,,,,,記住些逗號~~~

//首先須要使用

ob_start();//這個的做用就是先不讓當前動態頁面的內容發送到客戶端。

//既然不讓發送了,那麼內容怎麼獲取,以下。

$content=ob_get_contents();

//$content就是你當前頁面的全部內容。。暫時被保存在服務器內存中。

//而後獲取內容以後,就能夠把內容釋放出來了

ob_end_clean();

//好,把前面的內容直接寫入文件就是了。這也是生成靜態頁面的關鍵

file_put_contents("a.html",$content);

//之前已經OK了。

//看看你的目錄裏是否是已經有a.html了。

//記住這些句號。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

------------------------------------------

生成靜態頁以後,不少地方的方法就是直接重定向到新的頁面。a.html-----header("Location:a.html")。語句寫在不少句號那裏

其實我我的認爲沒必要要了。由於當前頁面已經動態生成,幹嗎在重定向一次呢。。

好了,問題來了。那麼生成的靜態頁面如何使用呢。

嗯,回頭去看不少逗號的地方。

咱們在當前這個頁面的開頭地方

咱們開始就進行一個判斷。判斷a.html是否存在。

若是存在就重定向到a.html就好了。代碼以下

--------------------------------------------

if(file_exists("a.html"))

{

   $time = time();

  

   //這個就是判斷下靜態頁面生成時間,咱們可能須要定時更新靜態頁面--畢竟動態頁面是要變化的麼。

   if($time - filemtime("a.html") < 30*60)

   {

   header("Location:a.html");

   }

}

------------------------------------------------------

好了。以上基本上就能夠完成的生成靜態頁面了。

固然,若是是要整站靜態頁面,以及靜態文件規則;就得本身去設計了---不可能全部的靜態頁面文件都叫a.html的麼。

咱們能夠根據當前動態頁面傳遞的值來進行命名等。~


2、僞靜態頁面

 僞靜態實際上就是把 index.php?act=about&cid=1 將這種形式的動態路徑用 about-1.html 這種形式輸出,也就是說瀏覽器每次訪問about-1.html地址能打開相應的index.php?act=about&cid=1動態網址。

僞靜態的實現本質上是配置服務器進行路徑轉換,根據不一樣的服務器環境,配置方法也不太同樣,PHP+iis6的話就要配置httpd.ini文件,php+iis7就要配置web.config,PHP+apache就要配置.htaccess文件(或者httpd.conf)


.htaccess(或者httpd.conf)文件的規則示例:
RewriteEngine on 
RewriteRule ^/?(index|guestbook|online)\.html$ index\.php [L]
RewriteRule ^/?(eindex)\.html$ index\.php?act=$1 [L]
RewriteRule ^/?(index|guestbook|online)-([0-9]+).html$ index\.php\?p=$2 [L]
RewriteRule ^/?([a-z0-9]+)_([0-9]+).html$ index\.php\?act=$1&id=$2 [L]
RewriteRule ^/?([a-z0-9]+)-([0-9]+).html$ index\.php\?act=$1&cid=$2 [L]
RewriteRule ^/?([a-z0-9]+)-([0-9]+)-([0-9]+).html$ index\.php\?act=$1&cid=$2&p=$3 [L]

httpd.ini示例:
[ISAPI_Rewrite]
RepeatLimit 32
# Block external access to the httpd.ini and httpd.parse.errors files
RewriteRule /httpd(?:\.ini|\.parse\.errors).* / [F,I,O]
# Block external access to the Helper ISAPI Extension
RewriteRule .*\.isrwhlp / [F,I,O]
RewriteRule ^/(index|guestbook|online)\.html$ /$1\.php 
RewriteRule ^/(eindex).html$ /index\.php\?act=$1 
RewriteRule ^/(index|guestbook|online)-([0-9]+).html$ /$1\.php\?p=$2 
RewriteRule ^/([a-z0-9]+)_([0-9]+).html$ /index\.php\?act=$1&id=$2 
RewriteRule ^/([a-z0-9]+)-([0-9]+).html$ /index\.php\?act=$1&cid=$2 
RewriteRule ^/([a-z0-9]+)-([0-9]+)-([0-9]+).html$ /index\.php\?act=$1&cid=$2&p=$3


若是在工做項沒有權限修改Apache的配置文件,咱們能夠在本地項目中建一個.htaccess文件,一樣能夠達到目的:

首先要肯定你的Apache啓用了mod_rewrite模塊,而且將http.conf文件中網站所在目錄的AllowOverride None 改成 AllowOverride all

而後在程序目錄下建立一個名爲 .htaccess的文件

將如下內容寫入這個文件裏:

RewriteEngine On

RewriteRule ^index/([0-9]+)\.html$ index.php?page=$1


真靜態和僞靜態的選擇

<1> 真靜態訪問效率高,利於seo.能夠減小對數據庫的操做。可是會佔用大量的磁盤.

<2> 僞靜態

①、能夠方便的實現對搜索引擎的優化

②、佔空間比較小。

③、經過生成不一樣view-2.hmtl 能夠實現內容的變化. 

④、有效的防止了注入攻擊

 

小結若是一個網頁會被頻繁的訪問(好比百萬級別),經過該網頁每次都會去操做數據庫,能夠考慮使用真靜態(建議有針對性的使用),若是一個網頁爲了實現對搜索引擎的優化,提供網站的安全性,使用僞靜態.

我的推薦使用僞靜態配合緩存技術來爲提供大型網站提速

相關文章
相關標籤/搜索