ThinkPHP的四種URL模式

普通模式 設置URL_MODEL 爲0
採用傳統的URL參數模式
http://serverName/appName/?m=module&a=action&id=1

PATHINFO模式 設置URL_MODEL 爲1
默認情況使用URL_PATHINFO模式,ThinkPHP內置強大的PATHINFO支持,提供靈活和友好URL支持。PATHINFO模式還包括普通模式和智能模式兩種:
普通模式 設置PATH_MODEL 參數爲1
該模式下面URL參數沒有順序,例如
http://serverName/appName/m/module/a/action/id/1
http://serverName/appName/a/action/id/1/m/module
以上URL等效

智能模式 設置PATH_MODEL 參數爲2 (系統默認的模式)
自動識別模塊和操作,例如
http://serverName/appName/module/action/id/1/  或者
http://serverName/appName/module,action,id,1/
在智能模式下面,第一個參數會被解析成模塊名稱(或者路由名稱,下面會有描述),第二個參數會被解析成操作(在第一個參數不是路由名稱的前提下),後面的參數是顯式傳遞的,而且必須成對出現,例如:
http://serverName/appName/module/action/year/2008/month/09/day/21/
其中參數之間的分割符號由PATH_DEPR參數設置,默認爲"/",例如我們設置PATH_DEPR爲"^"的話,就可以使用下面的URL訪問:
http://serverName/appName/module^action^id^1/
注意不要使用"@" 和"&"符號進行分割,該符號有特殊用途,可能會導致其他的衝突。
略加修改,就可以展示出富有詩意的URL,呵呵~
如果想要簡化URL的形式可以通過路由功能(後面會有描述),在PATH_INFO模式下面,會把相關參數轉換成GET變量,以及併入REQUEST變量,因此不妨礙應用裏面的以上變量獲取。

REWRITE模式 設置URL_MODEL 爲2
該URL模式和PATHINFO模式功能一樣,除了可以不需要在URL裏面寫入口文件,和可以定義.htaccess 文件外。
例如,我們可以增加如下的.htaccess內容把所有操作都指向index.php文件。

RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
兼容模式 設置URL_MODEL 爲3
兼容模式是普通模式和PATHINFO模式的結合,並且可以讓應用在需要的時候直接切換到PATHINFO模式而不需要更改模板和程序,基本上可以支持任何的運行環境。
只需要傳入PATHINFO 兼容模式獲取變量VAR_PATHINFO,默認值爲s,例如
http://serverName/appName/?s=/module/act

ion/id/1/
會執行和上面的URL等效的操作,並且也可以支持參數分割符號的定義,例如在PATH_DEPR設置爲"~"的情況下,下面的URL有效:
http://serverName/appName/?s=module~action~id~1
兼容模式的情況下面模板文件不用做任何更改,保持和PATHINFO模式的寫法一樣,只需要在切換URL模式的時候清空下模板緩存目錄。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章