ThinkPHP支援四種URL模式,可以透過設定URL_MODEL參數來定義,包括普通模式、PATHINFO、REWRITE和相容模式。
1.普通模式:'URL_MODEL'=>0,
http://serverName/appName/?m=module&a=action&id=1
2.PATHINFO模式:'URL_MODEL'=>1,(系統預設的模式)
預設使用URL_PATHINFO模式,PATHINFO模式也包含普通模式與智慧型模式兩種:
PATHINFO普通模式:'PATH_MODEL'=>1,
此模式URL參數沒有順序,例如
http://serverName/appName/m/module /a/action/id/1
http://serverName/appName/a/action/id/1/m/module
PATHINFO智慧型模式:'PATH_MODEL'=>2, (系統預設的模式)
此模式自動辨識模組和操作,例如
http://serverName/appName/module/action/id/1/
http://serverName/appName/module,action,id,1/
智慧模式下,第一個參數會被解析成模組名稱(或路由名稱,下面會有描述),第二個參數會被解析成操作(在第一個參數不是路由名稱的前提下),後面的參數是明確傳遞的,而且必須成對出現,例如:
http://serverName/appName/module/action/year/2000/month/01/day/01/
其中參數之間的分割符由PATH_DEPR參數設定,預設為"/",若設定PATH_DEPR為"^",則
http://serverName/appName/module^action^id^1/
注意不要使用"@" 和"&"符號進行分割,該符號有特殊用途,可能會導致其他的衝突。
如果想要簡化URL的形式可以透過路由功能(後面會有描述),在PATHINFO模式下,會把相關參數轉換成GET變量,以及併入REQUEST變量,因此不妨礙應用裡面的以上變量獲取。
3.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,PTL,L$1] =>3,
相容模式是普通模式和PATHINFO模式的結合,並且可以讓應用程式在需要的時候直接切換到PATHINFO模式而不需要更改模板和程序,基本上可以支援任何的運行環境。
只需要傳入PATHINFO 相容模式取得變數VAR_PATHINFO,預設值為s,例如
http://serverName/appName/?s=/module/action/id/1/
會執行和上面的URL等效的操作,並且也可以支援參數分割符號的定義,例如在PATH_DEPR設定為"~"的情況下,下面的URL有效:
http://serverName/appName/?s=module~action~id~1
相容模式的情況下面模板檔案不用做任何更改,保持和PATHINFO模式的寫法一樣,只需要在切換URL模式的時候清空下模板快取目錄。
以上就介紹了ThinkPHP的四種URL模式 URL_MODEL,包括了方面的內容,希望對PHP教程有興趣的朋友有幫助。