ThinkPHP的四种URL模式 URL_MODEL
路由:訪問項目中具體某個方法的URL地址,簡單理解就是URL地址
在ThinkPHP里系統提供了4種路由形式(之前的路由形式:index.php?p=平臺&c=控制器&a=方法;pca)
總結:pca為平臺、控制器、方法;thinkPHP里mca為分組、控制器、方法
①普通形式路由;
②Pathinfo形式路由;
③Rewrite形式路由;
④兼容形式路由
下面詳解
(1)普通形式路由
也叫get形式路由,所有信息通過get傳遞
路由形式:http://網址/入口文件(index.php)?m=分組&c=控制器名&a=方法&參數名=參數值
例如:訪問Home分組下的User控制器中的test方法,并傳遞一個參數id=1
http://www.1336.com/index.php?m=Home&c=User&a=test&id=1
可以通過$_GET['id']來驗證,輸出1。所以驗證成功
缺點:url傳遞的東西都會顯示出來,既不安全也不好看。所以用的不多
(2)pathinfo()形式路由(thinkPHP的默認路由)
路由形式:http://網址/入口文件(index.php)/分組名/控制器名/方法/參數名1/參數值1/參數名n/參數值n
http://www.1336.com/index.php/Home/User/test/id/100
方法里有$_GET['id'],輸出100。所以驗證成功
(3)rewrite路由形式(重寫)
路由形式:http://網址/分組名/控制器名/方法名/參數1/參數值1/參數n/參數值n
與thinkPHP默認的路由形式Pathinfo()形式路由的不同之處就是,缺少了入口文件
注意:該路由形式不能直接使用,需要配置完成才能使用
配置步驟:
1. 配置Apache下的httpd.conf,開啟擴展rewrite重寫模塊;
2. 修改虛擬主機配置文件,文件位于Apache目錄下,conf/extra/httpd-vhosts,加上允許重寫配置。表示允許重寫當前站點
簡單說就是給需要開啟重寫的站點,目錄配置處添加Allowoverride:all
#針對目錄的詳細配置
<Directory>
#允許所有訪問
allow from all
#允許重寫
AllowOverride all
#表示允許站點顯示文件目錄結構
Options +indexes
</Directory>
3. 重啟Apache
4. 將ThinkPHP壓縮包中的.htaccess文件復制到入口文件的同級目錄
配置完成后輸入網址驗證,這里還用上面pathinfo的網址,去掉入口文件后刷新,發現輸出100。OK~配置完成
拓展:
PHP的運行模式(5大運行模式):CGI模式(通用網關接口);FastCGI模式(常駐型CGI);CLI(命令行運行);Web模塊模式(Apache等Web服務器運行的模式);ISAPI模式(5.3版本后不再支持)
現在用的環境集成包的模式為Web模塊模式,工作開發中常用FastCGI常駐型模式
綜上,rewrite模式需要Apache支持,一般不推薦使用。除了Apache外服務器軟件還有nginx,lightd等。
(4)兼容路由形式
兼容路由形式結合了普通路由形式、pathinfo路由形式、rewrite路由形式特征
路由形式:http://網址/入口文件?s=/分組名/控制器名/方法名/參數1/參數值1
注意:兼容路由形式只有1個參數:參數名s,后面可以看做s參數值
例如:http://www.1336.com/index.php?s=/Home/User/test/id/100,驗證輸出100,說明訪問成功
(5)拓展:ThinkPHP中路由形式的配置
配置文件ThinkPHP/Conf/convention.php,ThinkPHP慣例配置文件
/* URL設置 */ 'URL_CASE_INSENSITIVE' => true, // 默認false 表示URL區分大小寫 true則表示不區分大小寫 'URL_MODEL' => 1, // URL訪問模式,可選參數0、1、2、3,代表以下四種模式: // 0 (普通模式); 1 (Pathinfo 模式); 2 (REWRITE 模式); 3 (兼容模式) 默認為Pathinfo 模式
注意:路由形式的配置值,不影響地址欄中輸入其他形式路由訪問。該配置項的值,影響的是ThinkPHP系統封裝的URL組裝函數(U函數)生成url地址的形式
【分享】
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,PT,L]
4.兼容模式:'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模式的時候清空下模板緩存目錄。
.
總結
以上是生活随笔為你收集整理的ThinkPHP的四种URL模式 URL_MODEL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 爆梗找茬王整顿职场攻略
- 下一篇: 小技能(三)