ThinkPHP3.2 四種 URL_MODEL模式
ThinkPHP支援四種URL模式,可以通過設定URL_MODEL引數來定義,包括普通模式、PATHINFO、REWRITE和相容模式。
普通模式 :URL_MODEL=0
url格式:http://serverName/appName/?m=module&a=action&id=1
PATHINFO模式 (預設): URL_MODEL=1
PATHINFO模式包括普通模式和智慧模式兩種:
普通模式 PATH_MODEL =1
該模式下URL引數沒有順序,例:
http://serverName/appName/m/module/a/action/id/1
http://serverName/appName/a/action/id/1/m/module
智慧模式 (預設)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的形式可以通過路由功能(後面會有描述),在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/action/id/1/
會執行和上面的URL等效的操作,並且也可以支援引數分割符號的定義,例如在PATH_DEPR設定為"~"的情況下,下面的URL有效:
http://serverName/appName/?s=module~action~id~1
相容模式的情況下面模板檔案不用做任何更改,保持和PATHINFO模式的寫法一樣,只需要在切換URL模式的時候清空下模板快取目錄。