上次簡單的說了下php中正則表達式的使用,這一次正則表達式可以派上用場了,學習偽靜態需要能夠很好的使用正則表達式,那麼偽靜態和真靜態的區別是什麼呢,我覺得應該是偽靜態可以節約磁盤空間、利於SEO、訪問速度上沒有真靜態那麼快。偽靜態也是對apache的rewrite機制的使用,下來就來分享下吧
1.使用偽靜態首先要確認打開rewrite模塊
首先打開httpd.conf,找到LoadModule rewrite_module modules/mod_rewrite.so去掉前面的#即可之後重啟apache,使用phpinfo確認重寫模塊成功啟用
看到有紅色這個就說明rewrite已經啟用成功了<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PGJyPgo8L3A+CjxwPjIuyrnTw86xvrLMrNKqz8jU2kRpcmVjdG9yecDvvNPSu77kQWxsb3dPdmVycmlkZSBBbGw8L3A+CjxwPtXi0ru+5L/J0tS809TaYXBhY2hltcRodGRvY3O1xERpcmVjdG9yeb3atePA77vy1d/Q6cTi1ve7+rXERGlyZWN0b3J5vdq148DvPC9wPgo8cD48cHJlIGNsYXNzPQ=="brush:java;">
3.apache指定首頁面、錯誤頁
首先新建一個.htaccess文件,一般是先新建一個xx.txt文件另存為即可,這個文件我就放到項目的根目錄,這個文件的內容如下
DirectoryIndex index.php
ErrorDocument 404 /static2/404.php
下面先來測試404,我們先訪問一個不存在的php看看404生效沒有,這個是我的錯誤頁面
首頁的html如下
系統首頁 歡迎
還有這麼一種情況需要考慮那就是訪問的時候apache列出目錄結構的問題,其實很簡單就在.htaccess加一句Options None,需要注意的是Directory裡就不能配置Options了,否則會出現403錯誤
4.偽靜態的使用
http://localhost/static2/view-sports-id5.html類似這種url我們應該見過很多了,這種就是一種偽靜態的url了,我們看上去訪問的是一個靜態的html但其實不是,類似這種url像sports和id後面的5可能就是程序中要使用的參數,我們訪問的其實是一個動態頁面。這樣的話比較利於SEO,下面上一段配置給大家看看
RewriteEngine on RewriteRule view-([a-zA-Z_]+)-id(\d+)\.html news.php?type=$1&id=$2
RewriteRule表示重寫規則,第一個空格後面的是正則規范後面的news.php?type=$1&id=$2才是真正訪問的php頁面,$1表示前面正則規范的第一個子表達式的值,$2以此類推,這樣我們就可以在news.php取得參數的值
同樣的如果是控制器也可以在相應文件夾裡寫一個.htaccess,之後加上我們的重寫規則
5.使用.htaccess來控制訪問權限
日常的開發中我們可能在項目裡面寫了DAO,控制器,工具類這一大堆的php,而這些文件我們是不希望別人通過浏覽器訪問到,這種情況使用session來限制似乎也不奏效,這種情況使用重寫規則就很簡單了
RewriteRule [a-zA-Z0-9_]+\.class\.php 403.html
這樣寫一句程序之外訪問就跳轉到另外一個頁面,實現了訪問的控制
6.RewriteCond的使用
有時我們需要判斷在某種情況下才使用重寫,這種情況就要使用RewriteCond了,例如我們可以判斷請求的是不是一個文件(或不存在的文件),如果滿足條件才執行重寫規則
#如果請求的不是一個文件
RewriteCond %{REQUEST_FILENAME} !-f
#並且不是一個目錄
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ccc.html index.php
這段配置的意思就是如果請求的ccc.html如果不存在則跳轉到index,php
再來看最後一段配置
[F]表示拒絕訪問,其他的看看注釋應該能看懂RewriteEngine On #你怎麼知道,這個請求就是www.hsp.com發來的. referer #如果你請求的是一個jpg圖片, 就禁止 RewriteCond %{HTTP_REFERER} !www.hsp.com RewriteRule .*\.jpg -[F]
最後總結一下,日常開發中並不是所有的頁面都要靜態化,例如後台系統、基金股票等要求實時性很高的頁面或網站、實時話費或流量查詢頁面、學歷查詢頁面不適合靜態化,對應內容相對穩定的例如宣傳性質的網站首頁可以考慮使用真靜態,如果不想使用真靜態但是又希望利於SEO偽靜態應該是一個不錯的選擇。