天天看點

PHP中的自定義路由使用小結

簡介

我手上有個用php寫的網站,類似于個人測試性質的站點,我獨立設計,在這過程中犯了所有可能的設計和程式設計上的錯誤,同時我也收獲了很多,這也促使

我去學習php和mysql。每當我學習新的技術或web實踐時,都會想到我的網站會從中得益。正如你可以想象到的,它的可讀性不強。測試網站往往在代碼

可讀性和可維護性方面表現糟糕,尤其當你僅僅因為某些必要的功能而學習一門程式設計語言時,而這也正是我一直以來學習php的方式。

PHP中的自定義路由使用小結

自從了解了asp.net

mvc,我便思考如何在這個網站上實踐這套mvc模式。我喜歡這整套概念的一切,尤其是路由。但我并不想為此而重構整個網站的現有架構,擔心這樣一來,大

部分現有代碼将變成像是異物一樣,不受我的控制和了解。網站已經有一個wordpress搭建的部落格,通過修改模闆讓它看起來就像是一個完整的站點,好比

在一巨大的牆上畫塗鴉一樣,這簡直是一團糟。

然後呢?剛不久前,我學習了一些rest

api的相關知識,這是為日常工作所需而學習的。有沒有一個最佳的方式去學習這些呢?我知道有個網站會從中獲益。在網上閱讀了一些關于在php環境應用

restful

api的文章,我了解了.htaccess檔案。現在我知道怎樣在php中搭建路由,是以,也許能在測試網站實施自己設計的小型的、簡單的mvc模型。

設想

在php中搭建自定義路由的關鍵在于增加一個.htaccess檔案,以下請看

具體實作:

我在網站檔案夾目錄中新增了一個”api”檔案夾,在裡面建立一個.htaccess檔案,内容是我從corey maynard寫的一段文本中參考來的。

<ifmodule mod_rewrite.c>

rewriteengine on

rewritecond %{request_filename} !-f

rewritecond %{request_filename} !-d

rewriterule ^(.*)$ index.php?request=$1 [qsa,nc,l]

</ifmodule>

長話短說,有了這個配置,所有以”www.yoursite.com/api/”開頭或指向不存在的檔案或路徑的請求都會被重定向到

index.php檔案。$1變量值表示請求的url位址,”request”變量名也很好了解,用$_request[‘request’]指令就可輕

易擷取。

另外,index.php檔案和.htaccess檔案在同一通路層級。

可能出現的問題?

事實上,你可能還沒啟用指定的module。

在wampserver環境下,我需要啟用相應module來支援本機運作。一種方法是點選托盤圖示進入”apache”目錄,在”apache

modules”清單中選中rewrite_module,然後重新開機所有服務。另一種方法是編輯httpd.conf檔案,取消下面這段配置的注釋

#loadmodule rewrite_module modules/mod_rewrite.so

我想接下來要做的事情之一就是給網站做幾個自測網頁,好讓我确定網站的負責人沒有改變任何東西。這聽起來可能有點偏執和可笑,但又一次,我需要臨時增加 “set names latin2;”配置來檢視資料庫導入的資料。

如果想驗證以上配置是否在伺服器上啟用,你可以使用這段代碼:

echo in_array('mod_rewrite', apache_get_modules());

接下來呢?

繼續為我的網站建立rest api。現在我才能實質性地将資料庫邏輯從網頁界面中抽離出來。

作者:曾钊泳

來源:51cto