開發指南
FleaPHP 應用程式通過分析 URL 地址來確定要執行的控制器及動作,以及傳遞給動作方法的參數。
預設情況下,FleaPHP 應用程式通過
http://www.example.com/index.php?controller=test&action=benchmark&source=1
這樣的 URL 地址來訪問應用程式的每一個功能。但有時候你希望 URL 地址能夠更好看一點,例如上面的地址變為:
http://www.example.com/index.php/test/benchmark/source/1
或者
http://www.example.com/test/benchmark/source/1
要實現上述兩種效果,必須藉助 FleaPHP 對 PATHINFO 模式和 URL 重寫的支援。
PATHINFO
要使用 PATHINFO 模式來運行應用程式,只需要簡單的設定應用程式選項 urlMode 為 URL_PATHINFO 就可以了。
採用 PATHINFO 時,對於相對位址,必須改寫為使用 / 開頭的絕對位址。例如 css/style.css 應該寫為 /css/style.css,而 images/banner.jpg 要寫為 /images/banner.jpg。除了圖片、CSS 樣式表和 JavaScript 檔案外,對網站其他檔案的引用也要使用絕對位址。
這個要求同樣適用於 URL 重寫入模式。
URL 重寫
URL 重寫比起 PATHINFO 來複雜得多,而且有一些限制。
- 目前 FleaPHP 對 URL 重寫的支援還很簡單,與 PATHINFO 相比僅僅是從 URL 地址中隱藏了 index.php 入口檔案的名字;
- URL 重寫需要 Apache 的 mod_rewrite 模組支援(IIS 使用者可以使用一些商業軟體);
- 必須配置 Apache 或者 .htaccess 檔案,以便啟用 mod_rewrite 模組;
- 對於複雜的目錄結構,你不得不編寫更多的重寫規則。
好了,希望上面的話沒有嚇到你。那麼看看最簡單的情況:
RewriteEngine onRewriteCond %{REQUEST_FILENAME} !-fRewriteRule ^(.*)$ /index.php/$1 [L]
上面的重寫規則很簡單,首先是啟用 URL 重寫。然後是判斷請求的檔案是否已經存在。只有當請求的檔案不存在時才進行 URL 重寫。
把上述內容儲存到應用程式根目錄,檔案名稱為 .htaccess。
很奇怪,在 Windows 資源管理員裡面不允許你建立 .htaccess 這樣只有副檔名的檔案。所以你必須先將檔案儲存為其他名字,例如 app.htaccess。然後進入命令列視窗(通過開始菜單運行 cmd.exe 程式即可),輸入 ren app.htaccess .htaccess 命令來對檔案改名。
最後,修改應用程式設定的 urlMode 選項為 URL_REWRITE。
如何產生 URL 地址
在 FleaPHP 應用程式中,我們總是應該使用 url() 函數和 FLEA_Controller_Action::_url() 方法來產生 URL 地址。這樣不管 urlMode 選項怎麼設定,我們都可以確保應用程式產生可以工作的 URL 地址。
例如 url('test', 'benchmark', array('source' => 1))
這樣的調用,在不同 urlMode 設定下,產生的 URL 地址也不同。
這種特性,可以避免因為應用程式修改了 urlMode 選項,而導致需要手工替換全部 URL 地址的問題。
更複雜的自訂 URL 地址
正在開發的 URL 路由功能,可以讓應用程式獲得完全的自訂 URL。例如
http://www.example.com/index.php?controller=article&action=view&article_id=123
可以用下面的地址來代替。不但好看,而且便於搜尋引擎索引檔案。
http://www.example.com/article/123