1、明確幾個重要概念php
靜態網址:純靜態HTML文檔html
動態網址:內容存於數據庫中,根據要求顯示內容,URL中以 ?, & 顯示不一樣的參數,如:news.php?lang=cn&class=1&id=2jquery
僞靜態網址:僞靜態僅僅是對動態網址的一個重寫,僞靜態網址不能讓動態網址「靜態化」 ,搜索引擎不會認爲僞靜態就是HTML文檔。其次,僞靜態可取,但應把重心放在去除冗餘參數、規範URL、儘量的避免重複頁上。linux
舉例說明: 這是一個動態網址 news.php?lang=cn&class=1&id=2,從seo的角度來看, 最好重寫爲 news-cn-sport-id2.html。這樣的也更加有效的防止sql注入攻擊 ☞ 可是也不要精簡重寫爲 news-2.html,這樣簡寫一樣不利於搜索引擎優化.面試
2、頁面靜態化概念正則表達式
■ 頁面靜態化概念sql
咱們大多數狀況下是直接訪問php文件,php腳本在服務器端執行並 返回信息,對於一些大型的網站,訪問量很大,頻繁的動態操做和操做 數據庫會加劇服務器的負擔.數據庫
在實際開發中,一般使用緩存技術(memcached)或者頁面靜態化 來解決apache
從靜態化形式看,頁面靜態化分爲:windows
① 真靜態
② 僞靜態
從靜態範圍看,頁面靜態化分爲:
① 整個頁面靜態化
② 局部靜態化(jquery)
頁面靜態化的必要性1
咱們看一個實際問題? 使用apache提供的 benchmarking tool來測試 下面的兩個程序,看看訪問各類訪問的時間是怎樣的?
//直接使用html輸出for循環的 信息. 01......99
for($i=0;$i<100;$i++){ echo "$i"; }
apache/bin/ab.exe 程序能夠來作效率測試
基本使用: ab [options] [http[s]://]hostname[:port]/path
options是選項: -n 執行訪問次數 -c 用戶併發數量
頁面靜態化的必要性2
從seo的角度來,google,baidu 更偏好靜態網址(僞靜態網址),比 如: news.php?lang=cn&class=1&id=2 這樣的動態網址,不如 news-cn-sport-id2.html ,這樣的格式.
頁面靜態化的必要性3
從安全的角度來看news-cn-sport-id2.html 更不容易被sql注入攻 擊。
3、使用php緩存機制完成頁面靜態化
咱們可使用php自帶的緩存機制來完成頁面靜態化,但在這裏我要 說明一點,僅靠php自身的緩存機制並不能完美的解決頁面靜態化, 每每須要和其它靜態化技術(一般是僞靜態技術)結合使用,
例子:(新聞查詢系統)當訪問一個頁面時,先判斷是否存在緩存,若是存在,則直接輸出緩存文件中的內容。不然,則先查詢數據庫,得到數據,而後生成緩存文件。 詳解PHP的緩存機制(圖), Output_buffering ,經常使用的函數包括 ob_start() ob_get_contents() ,ob_clean(),ob_end_clean() ob_end_flush() ob_flush() flush()
關於PHP常常有面試題.簡述ob_flush() 和flush()的 區別? 簡述PHP緩存機制.
單純使用php緩存機制完成頁面靜態的不足分析
解決方案(真靜態和僞靜態技術.)
4、頁面靜態化(真靜態)--原理示意圖
簡單的說: 頁面靜態化技術就是要把php->html直接訪問,從 而減小對數據庫的操做,達到提升訪問速度
基本流程是:
1.建立模板文件template.html
2.經過模板文件,建立靜態頁面的 php文件 xx.php
3. 用戶訪問生成的靜態頁面 xx.html
快速入門案例(根據模板生成靜態頁面)
5、數據庫和頁面靜態化(真靜態)結合
使用靜態頁面技術如何處理,在添加新聞的時候完成兩件事情:
①添加數據到數據庫
②同時生成對應的新聞詳細信息顯示靜態頁面
6、頁面靜態化(真靜態)的優勢和缺點
html靜態頁(真靜態)的好處有三點;
一是減小服務器對數據響應的負荷,
二是加載不用調動數據庫,響應速度快。
三是便於優化引擎。缺點也有幾點:一是空間佔用比較大。二是生成的文件多了,服務器對html文件的響應負擔也較重。
若是一個系統使用真靜態進行頁面靜態化,須要生成海量的靜態 頁面,咱們能夠考慮使用僞靜態來處理.
7、僞靜態 1
好比這個網頁 http://localhost/content.php/1,122,8912.html其實處理的腳本是content.php 參數爲1,122,8912 至關於content.php?a=1&b=122&c=8912 只不過這樣的URL太難記。搜索引擎也不喜歡。
真靜態只是徹底生成了HTML。 客戶端訪問的時候直接輸出。不用腳本解釋。在流量很是大的時候(好比天天有上百萬的訪問量的時候)會起到很好的效果。也就是說服務器端實實在在的存在這個HTML頁面。 固然在你網站的流量沒有那麼大的時候。URL重寫是最好的方法(若是訪問量很大,還能夠考慮負載均衡)
URL重寫的方法有不少種,APACHE(rewrite),IISREWRITE。PHP腳本直接處理。咱們先講解如何使用PHP腳本直接處理。
8、僞靜態 2
下面以程序爲例講一下PHP僞靜態的程序實現方法程序爲例:
http://localhost/content.php/1,122,8912.html
//利用server變量 取得PATH_INFO信息 該例中爲 /1,122,8912.html 也就是執行腳本名後面的部分
if(@$path_info =$_SERVER["PATH_INFO"]){
//正則匹配一下參數
if(preg_match("/\/(\d+),(\d+),(\d+)\.html/si",$path_info,$arr_path)){
$gid =intval($arr_path[1]);
//取得值 1
$sid =intval($arr_path[2]);
//取得值122
$softid =intval($arr_path[3]);
//取得值8912
}else die("Path:Error!");
}else die('Path:Nothing!');
面試題: 匹配模式中的 s表示什麼意思.
9、僞靜態 3
下面以程序爲例講一下另一種形式的PHP僞靜態的程序實現方法程序爲例:
http://www.hsp.com/news-id23.html 實現上面形式的僞靜態使用另一種方式,經過apache的 rewrite機制來實現.
10、僞靜態4
下面以程序爲例講一下另一種形式的PHP僞靜態的程序實現方法程序爲例:
http://www.hsp.com/news-id23.html 咱們使用另一種方式,經過apache的 rewrite機制來實現.
1.檢測Apache是否支持mod_rewrite 經過php提供的phpinfo()函數查看環境配置,經過Ctrl+F查找到「Loaded Modules」,其中列出了全部 apache2handler已經開啓的模塊,若是裏面包括「mod_rewrite」,則已經支持,再也不須要繼續設置。
若是沒有開啓「mod_rewrite」,則打開目錄 您的apache安裝目錄「/apache/conf/」 下的 httpd.conf 文 件,經過Ctrl+F查找到「LoadModule rewrite_module」,將前面的」#」號刪除便可。
若是沒有查找到,則到「LoadModule」 區域,在最後一行加入「LoadModule rewrite_module modules/mod_rewrite.so」(必選獨佔一行),而後重啓apache服務器便可。
11、僞靜態5
2.在httpd.conf中配置虛擬主機
# Virtual hosts
啓用虛擬主機 Include conf/extra/httpd-vhosts.conf
3.httpd_vhosts.conf文件中,配置相應的選項.詳細講解
<VirtualHost *:80> DocumentRoot "C:/myenv2/apache/htdocs/static2" ServerName www.hsp.com <Directory "C:/myenv2/apache/htdocs/static2"> #403錯誤提示,能夠阻止人訪問. #Allow from All #若是文件目錄在apache目錄外面,註釋掉optinos 則,不能列表. #options +Indexes #不讓列出列表配置 #options None #設置歡迎頁面 #DirectoryIndex aa.html #下面這個表示能夠去讀取 .htaccess文件,也能夠直接在虛擬主機中配置. #Allowoverride All RewriteEngine On RewriteRule news-id(\d+).html$ searchNews.php?id=$1 #若是匹配不到,能夠指定一個錯誤頁 errorDocument 404 /404.php #這裏能夠設置多個重寫的規則 #RewriteRule news-id.html$ error.php </Directory> </VirtualHost>
12、僞靜態 6
4.在相應的目錄下編寫.htaccess 重寫規則
若是在linux下能夠直接建立, 若是是在windows平臺下,用記事本建立一個文件,好比abc.txt,而後另存 爲 .htaccess文件便可
5.重寫規則,也能夠直接在配置虛擬主機的<Directory>段配置.
十3、僞靜態 7
☞ rewrite規則介紹
咱們新建一個.htaccess文件以後,就在裏面寫入如下內容: RewriteEngine on #rewriteengine爲重寫引擎開關on爲開啓off爲關閉
快速入門案例: RewriteRule ([0-9]{1,})$ index.php?id=$1 我講解一下RewriteRule:RewriteRule是重寫規則,支持正則表達式的,上面的 ([0-9]{1,})是指由數字組成的,$是結束標誌,說明是以數字結束!
如今咱們能夠實現僞靜態頁面了,(上機練習題!)
咱們但願把用戶輸入的 http://localhost/view-23.html ulr
從新被apache替換成 http://localhost/index.php?action=view&id=23 這個規則應當怎樣寫?
☞ 在.htaccess目錄下建立一個index.php看看可否獲得apache改寫後的url $_GET['action'] => view $_GET['id'] => 23
十4、僞靜態特色
若是一個網站使用真靜態技術,會生成海 量的html靜態頁面,能夠考慮使用僞靜態 技術來優化咱們的網站
url重寫(僞靜態)的好處:
一,能夠方便的實現對化化引擎的優化,而且比生成靜態更加方便。
2、佔空間比較小。
3、首頁天天都自動變化,不用維護。網站首頁通常都有熱點排行之類的,你能夠設爲,24小時排行,一週排行,再加上最新文章,最新點評等。這樣首頁每天是有變化的。
四,便於廣告的輪顯。好比:你能夠把art1234.php,這個虛成n個頁,如art_1234.html,news_1234.html,top_1234.html,在不一樣的頁面放不一樣的廣告.總之是動態的,你就能夠隨意動。
url重寫的缺點:就是效率不如生成html的,由於它不是真正意義上的靜態頁,每次請求是要讀取數據庫的。但你能夠用緩存技術來補償一下。
十5、真靜態 VS 僞靜態
①真靜態訪問效率高,利於seo.能夠減小對數據庫的操做。可是會佔用大量 的磁盤.
②僞靜態
1、能夠方便的實現對搜索引擎的優化,
2、佔空間比較小。
3、經過生成不一樣view-id2.hmtl 能夠實現內容的變化.
4、有效的防止了注入攻擊
小結: 若是一個網頁會被頻繁的訪問(好比百萬級別),經過該網頁每次都會去操做數據庫,能夠考慮使用真靜態(建議有針對性的使用),若是一個網頁爲了實現對搜索引擎的優化,提供網站的安全性,使用僞靜態.
十6、真靜態和僞靜態的選擇
使用靜態化技術的建議.
1.網站實時性要求高,不要使用靜態化(真靜態,僞靜態均不適宜).
2.若是網站訪問量較小,沒有必要使用靜態化技術
3.若是數據項目很少,可是訪問頻率極大,建議使用真靜態,好比新浪新聞頻道
4.若是數據項目海量,使用真靜態會生成海量的html靜態頁面,建議 使用僞靜態
5.在一個大型網站中,靜態化技術是綜合使用的,這個須要你們經驗 的積累,多作項目