php中使用偽靜態

上次簡單的說瞭下php中正則表達式的使用,這一次正則表達式可以派上用場瞭,學習偽靜態需要能夠很好的使用正則表達式,那麼偽靜態和真靜態的區別是什麼呢,我覺得應該是偽靜態可以節約磁盤空間、利於SEO、訪問速度上沒有真靜態那麼快。偽靜態也是對apache的rewrite機制的使用,下來就來分享下吧

1.使用偽靜態首先要確認打開rewrite模塊

首先打開httpd.conf,找到LoadModule rewrite_module modules/mod_rewrite.so去掉前面的#即可之後重啟apache,使用phpinfo確認重寫模塊成功啟用

看到有紅色這個就說明rewrite已經啟用成功瞭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.偽靜態的使用

https://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偽靜態應該是一個不錯的選擇。

You May Also Like