ThinkPHP支持四種URL模式,可以通過設置URL_MODEL參數來定義,包括普通模式、PATHINFO、REWRITE和兼容模式.
普通模式 設置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模式的時候清空下模板緩存目錄.
新聞熱點
疑難解答
圖片精選