PHP偽靜態圖文代碼詳細介紹

來源:互聯網
上載者:User

前言

關於偽靜態話題,眾說紛紜。我不是很在意這些討論,但是有一些大牛給出的看法確實是很有味道的, 而且也是比較的公正。

使用了偽靜態話,會耗費CPU資源,但是對於SEO什麼的更加有益;
不適用偽靜態而是使用純靜態(如html)的話,會造成硬碟讀寫瓶頸;

不管怎樣,秉承學習新知識的理念,瞭解一下偽靜態實現還是挺好的。與JavaWeb中實現偽靜態思路有點不太一致(但是原理其實上是一致的啦,不過多解釋了)。PHP中實現微靜態稍稍的複雜了一點點,但是卻更加的靈活了,維護起來也很方便。

PHP 偽靜態

關於PHP實現偽靜態方法不僅可以在路由方面解決,還可以藉助apache,ngnix伺服器等方式來實現。今天剛好遇到了這麼話題,在此做下記錄,以備不時之需。

使用apache實現偽靜態

藉助於Apache伺服器的方式來實現我個人有一點點的理解。類似於做飯。

我們做飯之前是需要有一套廚具的, 然後需要點火,再根據做什麼菜來選擇不同的烹飪方式。

同樣的,本方式原理類似。首先Apache伺服器就是這樣的一套廚具,然後我們開啟“偽靜態方法”就好比點了個火。最後根據不同的重寫規則來完成不同的偽靜態實現。

這樣一來就很容易理解了吧。

第一步:httpd.conf去注釋

在apache伺服器的安裝目錄下找到httpd.conf檔案,然後開啟找到所示的mode_rewrite.so行記錄項,去掉該行最前面的那個#號注釋符即可。

查看此項內容是否開啟可以藉助phpinfo()探針函數來實現。這點比較基礎,在此就不作介紹了。

  • 開啟之前:

  • 開啟之後:

第二步:更改重寫入權限

下面正式“點火”吧。具體就是在剛才的httpd.conf檔案下找到 AllowOverride None ,然後修改為AllowOverride All,如此即可。

第三步:按需添加偽靜態規則

現在就是具體的重寫規則了。具體的實現方式為在需要進行“偽靜態”的項目的根目錄下添加一個.htaccess 檔案。

通常來說我們會使用這樣的方式來實現PHP的偽靜態化。

代碼借鑒於網路

.htaccess 檔案中 寫入

<IfModule mod_rewrite.c>    RewriteEngine on    RewriteRule index.html$ index.php    .    RewriteRule index-([1-9]+[0-9]*).html$ index.php?p=$1    RewriteRule ([a-z]{1,})-([0-9]{1,}).html$ index.php?action=$1&id=$2</IfModule>

具體的含義如下:

  • RewriteEngine : 重寫引擎開關,On為開啟, Off為關閉。

- RewriteRule: 重寫規則,也就是我們的菜譜了,針對每一個規則將按照由上往下的優先順序進行匹配,可以寫多個重寫規則。

重寫規則詳解

規則模板為: 關鍵字RewriteRule 靜態路由 $ 動態PHP路由。切記之間有空格哈。

其實學過Python中一個叫Django的架構的都應該知道啦,其實就是個類似於匹配轉換的過程,一對一轉換。沒學過的這樣一說也應該能很輕鬆的理解啦。

關鍵在於靜態路由可以使用Regex來進行匹配,這樣正好照應了php動態參數的特點。

下面來實戰一下吧。
準備一下代碼,在項目目錄中添加剛才的.htaccess檔案,規則如上。然後添加一個index.php檔案。代碼內容如下:

<?php/** * Created by PhpStorm. * User: ${郭璞} * Date: 2017/1/18 * Time: 11:07 */if($_GET['name']) {    echo "Name: ".$_GET['name']."<br />";}if($_GET['age']) {    echo "Age: ".$_GET['age']."<br />";}

入門級: RewriteRule index.html$ index.php

嚴格匹配,在瀏覽器中輸入參數為index.html的時候,apache就會把用戶端的請求發往index.php來進行解析。

菜鳥級: RewriteRule index-([a-z0-9]*).html$ index.php?name=$1

下面添加正則匹配的方式實現。
使用PHP動態方式!

使用偽靜態方式(由於漢語編碼問題,這裡使用英文字母代替)

但是如果匹配出錯的情況下就會報404 的錯誤啦。

進階級: RewriteRule ([a-z]{1,})-([0-9]{1,}).html$ index.php?name=$1&age=$2

有了上面的鋪墊了,下面的就不難理解了。規則就是任意的(小寫字母-數字.html形式的路由都會被放置到後面的action參數和id參數上)

總結

嗯,大致就是這麼多了。其實關於偽靜態實現方式,技巧還有很多,這裡簡單的介紹了一下,做個記錄,也算是拋磚引玉咯。

而且有很多項目中的.htaccess檔案寫的真的是 很經典很經典。咱們應該多多的借鑒一下。

最後,今天是2017年大年初一了,祝看到這篇文章的你

新年快樂,新的一年編程freebug.

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.