上次簡單的說了下php中Regex的使用,這一次Regex可以派上用場了,學習偽靜態需要能夠很好的使用Regex,那麼偽靜態和真靜態區別是什麼呢,我覺得應該是偽靜態可以節約磁碟空間、利於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;"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all之後的偽靜態重寫規則可以在Directory節點裡寫,也可以寫在一個單獨的.htaccess檔案裡,我強烈推薦使用後面這種方式
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
RewriteEngine on的意思是啟用apache的rewrite引擎
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
再來看最後一段配置
RewriteEngine On#你怎麼知道,這個請求就是www.hsp.com發來的. referer#如果你請求的是一個jpg圖片, 就禁止RewriteCond %{HTTP_REFERER} !www.hsp.com RewriteRule .*\.jpg -[F][F]表示拒絕訪問,其他的看看注釋應該能看懂
最後總結一下,日常開發中並不是所有的頁面都要靜態化,例如後台系統、基金股票等要求即時性很高的頁面或網站、即時話費或流量查詢頁面、學曆查詢頁面不適合靜態化,對應內容相對穩定的例如宣傳性質的網站首頁可以考慮使用真靜態,如果不想使用真靜態但是又希望利於SEO偽靜態應該是一個不錯的選擇。
http://www.bkjia.com/PHPjc/621636.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/621636.htmlTechArticle上次簡單的說了下php中Regex的使用,這一次Regex可以派上用場了,學習偽靜態需要能夠很好的使用Regex,那麼偽靜態和...